UVA 465 - Overflow
2012-02-28 13:02
399 查看
本题主要是作了个高精度加法,乘法运算。代码还够长,题中我忽略了sscanf()得用法,要注意一些。还有就是复杂度的计算在这里显得重要了些,还得在这方面加把劲。
代码如下(C/C++):
代码如下(C/C++):
#include<stdio.h> #include<string.h> #define MAXN 20000 char a[MAXN], b[MAXN],s[MAXN],y[2]; int A[MAXN], B[MAXN], S[MAXN]; void decide() { long long a1, b1, s1; sscanf(a,"%lld",&a1); sscanf(b,"%lld",&b1); sscanf(s,"%lld",&s1); printf("%s %s %s\n",a,y,b); if(a1 > 0x7fffffff) printf("first number too big\n"); if(b1 > 0x7fffffff) printf("second number too big\n"); if(s1 > 0x7fffffff) printf("result too big\n"); } void a_b_mult() { memset(A, 0, sizeof(A)); memset(B, 0, sizeof(B)); memset(S, 0, sizeof(S)); int len1 = strlen(a); for(int i = 0; i < len1; i ++) A[len1-1-i] = a[i] - '0'; int len2 = strlen(b); for(int j = 0; j < len2; j ++) B[len2-1-j] = b[j] - '0'; for(int i = 0; i <= len2; i ++) { int c = 0; for(int j = 0; j <= len1; j ++) { S[i + j] += B[i] * A[j] +c; c = S[i + j] / 10; S[i + j] %= 10; } } int i; for(i = MAXN; i > 0; i --) if(S[i]) break; for(int j = 0; j <= i; j ++) s[j] = S[i - j] + '0'; s[i+1] = '\0'; decide(); } void a_b_sum() { memset(A, 0, sizeof(A)); memset(B, 0, sizeof(B)); memset(S, 0, sizeof(S)); int len1 = strlen(a); for(int i = 0; i < len1; i ++) A[len1-1-i] = a[i] - '0'; int len2 = strlen(b); for(int j = 0; j < len2; j ++) B[len2-1-j] = b[j] - '0'; int t; if(len1>len2) t = len1; else t = len2; int c = 0; for(int k = 0; k <= t; k ++) { S[k] = A[k] + B[k] + c; c = S[k] / 10; S[k] %= 10; } int i; for(i = MAXN; i > 0; i --) if(S[i]) break; for(int j = 0; j <= i; j ++) s[j] = S[i - j] + '0'; s[i+1] = '\0'; decide(); } void input() { while(scanf("%s%s%s",a,y,b) == 3) { if(y[0] == '+') a_b_sum(); else a_b_mult(); } } int main() { input(); return 0; }
相关文章推荐
- UVA 465 Overflow(浮点数的范围)
- uva-465(overflow)
- UVA - 465 Overflow
- UVA 465 - Overflow
- UVa 465 - Overflow
- UVa 465 - Overflow
- UVa 465 - Overflow
- UVa 465 Overflow
- UVA 465 Overflow
- UVA - 465 Overflow
- UVa 465 Overflow (比较大小难道不应该用double吗)
- UVA 465 - Overflow(大数)
- uva465 - Overflow
- uva 465 Overflow 还是高精度。。。
- UVA_465_Overflow
- UVa 465 - Overflow 解题报告
- UVA465:Overflow
- UVA - 465 Overflow atof的使用方法
- uva 465 - Overflow 大数加法 大数乘法
- UVa 465 Overflow