标签:
Regionals 1998 >> Europe - Central
问题链接:UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers。入门练习题,用C语言编写。
题意简述:输入两个整数,都反转(逆序)后再求和,输出相加后反转(逆序)的结果。
问题分析:整数可能很大,大到200位;相加结果反转后左边的0需要去掉。
程序中封装了两个函数来实现,逻辑更加简单清晰。
AC的C语言程序如下:
/* UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers */ #include <stdio.h> #include <string.h> #define MAXN 200 void revers(char s[]) { int start, end; start = 0; end = strlen(s) - 1; while(start < end) { char temp; temp = s[start]; s[start] = s[end]; s[end] = temp; start++; end--; } } int add(char s[], char t[], char r[]) { int i, j, k, c; i = strlen(s) - 1; j = strlen(t) - 1; c = 0; k = 0; while(i >= 0 || j >= 0) { if(i >= 0) r[k] = s[i] - '0' + ((j>=0)?(t[j] - '0'):0) + c; else r[k] = t[j] - '0' + c; if(r[k] >= 10) { r[k] = r[k] - 10 + '0'; c = 1; } else { r[k] = r[k] + '0'; c = 0; } i--; j--; k++; } if(c > 0) r[k++] = c + '0'; r[k] = '\0'; i = 0; while(i < k && r[i] == '0') i++; return i; } int main(void) { int n, start; char s[MAXN+1], t[MAXN+1], ans[MAXN+<span style="font-family:SimSun;">2</span>]; scanf("%d", &n); while(n--) { scanf("%s%s", s, t); revers(s); revers(t); start = add(s, t, ans); printf("%s\n", ans + start); } return 0; }
UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
标签:
原文地址:http://blog.csdn.net/tigerisland45/article/details/52138046