本帖最后由 jackz007 于 2021-12-8 13:18 编辑 #include <stdio.h>
char * foo1(char s[])
{
char i , j , m ;
for(m = 0 ; s[m] ; m ++) s[m] -= '0' ;
for(i = 0 ; i < m ; i ++) s[m - i] = s[m - i - 1] ;
s[0] = m ;
return s ;
}
char * foo2(char s[])
{
char i , j , m ;
for(m = s[0] , i = 0 ; i < m ; i ++) s[i] = s[i + 1] + '0' ;
s[m] = '\0' ;
return s ;
}
void add(char c[] , char a[] , char b[])
{
char e , i , j , k , t ;
for(k = e = 0 , i = a[0] , j = b[0] ; i > 0 && j > 0 ; i -- , j -- , k ++) {
c[k + 1] = (a[i] + b[j] + e) % 10 ;
e = (a[i] + b[j] + e > 9) ? 1 : 0 ;
}
if(i) {
for(; i > 0 ; i -- , k ++) {
c[k + 1] = (a[i] + e) % 10 ;
e = (a[i] + e > 9) ? 1 : 0 ;
}
} else if(j) {
for(; j > 0 ; j -- , k ++) {
c[k + 1] = (b[j] + e) % 10 ;
e = (b[j] + e > 9) ? 1 : 0 ;
}
}
if(e) {
c[++ k] = 1 ;
e = 0 ;
}
for(i = 0 ; i < k / 2 ; i ++) {
t = c[i + 1] ;
c[i + 1] = c[k - i] ;
c[k - i] = t ;
}
c[0] = k ;
}
main(void)
{
char a[3][32] , s[256] ;
int d , f , i , k ;
scanf("%s" , s) ;
for(f = 1 , i = k = 0 ; s[i] && k < 2 ; k ++) {
for(; s[i] && (s[i] < '0' || s[i] > '9') ; i ++) ;
for(d = 0 ; s[i + d] >= '0' && s[i + d] <= '9'; d ++) a[k][d] = s[i + d] ;
a[k][d] = '\0' ;
i += d ;
if(d > 30) {
fprintf(stderr , "变量 %d 长度超限。\n" , k + 1) ;
f = 0 ;
break ;
}
}
if(f) {
add(a[2] , foo1(a[0]) , foo1(a[1])) ;
printf("总和 : %s\n" , foo2(a[2])) ;
}
}
编译、运行实况:D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
99999999999999999999999999999,1
总和 : 100000000000000000000000000000
D:\0002.Exercise\C>
|