一.题目描述:
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
输入:
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
输出:
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
样例输入:
8 1300 48
2 1 7
0
样例输出:
2504
1000
二.题目分析
对于做这种水题,最重要的是要走心,千万不要忘记0,0测试样例,再次感慨一下while do和do whie,终于感受到了强大的区别.
三.代码
1.while do
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long A,B,x;
int i,j,m,a[100];
while(1)
{
scanf("%d",&m);
if(m==0)
break;
scanf("%lld%lld",&A,&B);
x=A+B;
i=0;
while(x)
{
a[i]=x%m;
x /=m;
i++;
}
if(i==0) //当x==0时,循环并没有执行
printf("0\n");
else
{
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");
}
}
return 0;
}
2. do while
#include<stdio.h>
int main()
{
long long a,b;
int m,i;
while(scanf("%d",&m)!=EOF){
if(m==0) break;
scanf("%lld%lld",&a,&b);
a=a+b;
int ans[50],size=0;
do{ //循环至少执行一次,不需要特殊处理
ans[size++]=a%m;
a/=m;
}while(a!=0);
for(i=size-1;i>=0;i--){
printf("%d",ans[i]);
}
printf("\n");
}
return 0;
}