注册 登录
编程论坛 C语言论坛

1022 D进制的A+B (20 分)

天马星空101 发布于 2019-08-12 18:49, 2877 次点击
1022 D进制的A+B (20 分)

输入两个非负 10 进制整数 A 和 B (≤2
​30
​​−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103


#include<stdio.h>
int main()
{
    int a,b,d;
    scanf("%d %d %d",&a,&b,&d);
    int sum=a+b;
    int t,count=1;

    while(sum>=count){
    //    i++;
        count*=d;
    }
    //i--;
    count=count/d;
   
    if(sum==0){
        printf("0");
    }else{
        while(count>0){
        t=sum/count;
        printf("%d",t);
        sum=sum%count;
        count/=d;
    }
    }
   
   

    return 0;
}

想问下大佬,我的这个程序哪里有问题,十分感谢
8 回复
#2
zbjzbj2019-08-12 19:01
只有本站会员才能查看附件,请 登录
#3
zbjzbj2019-08-12 19:01
只有本站会员才能查看附件,请 登录
#4
天马星空1012019-08-12 19:04
答案有的对的到,但在pat上不完全正确
只有本站会员才能查看附件,请 登录
#5
zbjzbj2019-08-12 22:27
两个非负 10 进制整数 A 和 B,声明变量无符号整形?
#6
H_M2019-08-13 00:46
回复 楼主 天马星空101
程序应该差不多,你可以将
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
int sum=a+b;
int t,count=1;

变成这样
int a,b,d;
int sum=a+b;
int t,count=1;
scanf("%d %d %d",&a,&b,&d);


希望对你有所帮助
#7
天马星空1012019-08-13 07:39
不行,不是这部分的错误
#8
rjsp2019-08-13 09:08
首先要给出链接:https://

    while(sum>=count){
    //    i++;
        count*=d;
    }
你不担心 count 溢出吗?不信,你改其类型为 long long 试试。

------------------------------------------------------
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned a,b,d;
    scanf( "%u%u%u", &a, &b, &d );

    char buf[32] = { [31]='\0' };
    char* p = buf+30;
    if( a+b == 0 )
    {
        *--p = '0';
    }
    else
    {
        for( unsigned s=a+b; s>0; s/=d )
            *--p = s%d + '0';
    }
    puts( p );
}

#9
H_M2019-08-13 10:41
回复 8楼 rjsp
学到了,学到了
1