|
发表于 2021-12-8 12:31:21
|
显示全部楼层
本楼为最佳答案
本帖最后由 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>
复制代码
|
|