#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
int n;
int a,b,ans[10000];
char *c,*d,*e;
int i = 0;
c = (char*)(malloc(20 * sizeof(char)));
d = (char*)(malloc(20 * sizeof(char)));
scanf("%d",&n);
while(i < n){
scanf("%d",&a);
scanf("%d",&b);
itoa(a,c,10);
itoa(b,d,10);
a = atoi(strrev(c)) + atoi(strrev(d));
itoa(a,c,10);
e = c;
while(*e == '0')e++;
ans[i] = atoi(strrev(e));
i++;
}
i = 0;
while(i < n){
printf("%d\n",ans[i]);
i++;
}
}
问问题
5632 次
2 回答
2
您的程序中没有strrev
声明这样的功能。编译器假定它是一些未知函数返回int
. 因此诊断消息,因为atoi
需要一个指针,而不是一个int
.
是什么strrev
?为什么你试图调用这个函数而不先声明它?C 标准库没有这样的功能,因此包括您已经包含的那些标准头文件是不够的(除非您假设一些扩展实现)。
于 2010-06-12T06:00:32.610 回答
0
除了strrev
不标准的问题,可以很容易地实现,例如
char *strrev(char *s)
{
size_t l = strlen(s), i;
char *r = malloc(l + 1);
if ( r != NULL ) {
for(s += l-1, i=0; i < l; i++, s--) r[i] = *s;
r[i] = '\0';
}
return r;
}
只是说(非就地还原),您应该更喜欢使用strtol
orstrtoul
代替atoi
并实施itoa
,因为 afaik 也不是标准的(sprintf
如果基数为 10,您无论如何都可以使用)。
于 2010-06-12T14:08:45.143 回答