c语言 数字逆序相加
关注:267答案:3手机版
解决时间 -02-14 17:37
提问者一护の喵咪
-02-13 23:53
Description
数字逆序就是把原来的数字顺序颠倒过来,第一位变成最后一位,例如1245,逆序后就变成5421了。需要注意的是,所有的前导0都要被忽略。也就是说,0在逆序后会丢失,例如1200,逆序后就是21。因此,逆序后不会出现任何尾数为0的情况。
你的任务就是要对两个数字逆序后求和。当然,结果不唯一,因为有些特殊的数可能是某几个数逆序的结果,例如21可能是12,120或1200逆序得到的。这里假定没有0,也就是原始的数是12。
Input
输入包括N个样例,第一行是一个正整数N,接下来就是N行输入,每行包括两个正整数,空格隔开,它们都是需要你逆序后相加的数。
Output
对于每组样例,输出逆序后和的逆序。没有任何前导0。
3
24 1
4358 754
305 794
34
1998
1
#include
#include
#include
#include
int change(char *str)
{
int i,p,n;
p=0;
for(i=strlen(str)-1;i>=0;i--)
{
n=str[i]-'0';
if(n==0)
{
continue;
}
p+=n*pow(10,i);
}
return p;
}
main()
{
int x,f;
char p[8],q[8],g[8];
scanf("%d",&x);
while(x--)
{
scanf("%s %s",&p,&q);
f=change(p)+change(q);
itoa(f,g,10);
printf("%d\n",change(g));
}
return 0;
}
为什么提示的是wrong answer,输出输入都对的呀
最佳答案
二级知识专家千里故人稀
-02-14 01:22
scanf("%s %s",&p,&q);
应改为
scanf("%s %s",p,q);
pow应该自己写次方。我以前也是第一次用pow的时候不知道pow计算的是浮点型有精度误差,强行int结果WA了。。
全部回答
1楼嘴硬欠吻
-02-14 04:34
#include
intmain(intargc,char*argv[]){
intx,y,rx,ry,N,t,xy;
scanf("%d",&N);
while(N--){
scanf("%d%d",&x,&y);
for(rx=0,t=x;t;(rx*=10)+=t%10,t/=10);
for(ry=0,t=y;t;(ry*=10)+=t%10,t/=10);
for(xy=0,t=rx+ry;t;(xy*=10)+=t%10,t/=10);
printf("%d\n",xy);
}
return0;
}
2楼口袋里的自由
-02-14 03:01
假设x=2569
printf("%ld\t",a); 就是打印x的个位9
然后x除以10,x=256 原来的十位变成了个位
再调用pin()时,a=x%10得到的a=6 是打印原来x的十位
再除以10再调用pin(),得到打印原来x的百位
这样一直下去直到全部打印完,递归结束
printf("%ld\n",x); 应该是调试用的,影响显示的输出结果,可以去掉
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
推荐资讯
大家都在看