UVA 10494 If We Were a Child Again 高精度除以低精度。。
2013-07-28 22:04
435 查看
If We Were a Child Again
Input: standard input
Output: standard output
Time Limit: 7 seconds
题意不难理解。。就是输入一个表达式。可能是a / b 或者 a % b。。。输出运算结果。。。
这题是高精度除以低精度的题目。。。
思路是这样:a的第n位整除以b以后。把得到的结果存在一个新数组的第n位。然后剩余的余数保留下来、下一位除的时候加上这些剩余的余数。。
然后输出的时候。就从头开始遇到非0开始输出。。。
要注意a = 0的情况要单独考虑, 还有就是那个余数要用long long 来存。。因为b最大为INT_MAX ,所以完全可能在求余之前那个数是大于b的,也就超过了int。。。
Input: standard input
Output: standard output
Time Limit: 7 seconds
“Oooooooooooooooh! If I could do the easy mathematics like my school days!! I can guarantee, that I’d not make any mistake this time!!” Says a smart university student!! But his teacher even smarter – “Ok! I’d assign you such projects in your software lab. Don’t be so sad.” “Really!!” - the students feels happy. And he feels so happy that he cannot see the smile in his teacher’s face. | |
The Problem The first project for the poor student was to make a calculator that can just perform the basic arithmetic operations. But like many other university students he doesn’t like to do any project by himself. He just wants to collect programs from here and there. As you are a friend of him, he asks you to write the program. But, you are also intelligent enough to tackle this kind of people. You agreed to write only the (integer) division and mod (% in C/C++) operations for him. | |
Input Input is a sequence of lines. Each line will contain an input number. One or more spaces. A sign (division or mod). Again spaces. And another input number. Both the input numbers are non-negative integer. The first one may be arbitrarily long. The second number n will be in the range (0 < n < 231). | |
[b] [/b] [b]Output[/b] A line for each input, each containing an integer. See the sample input and output. Output should not contain any extra space. | |
[b] [/b] [b] [/b] [b]Sample Input[/b] 110 / 100 99 % 10 2147483647 / 2147483647 2147483646 % 2147483647 | |
[b]Sample Output[/b] 1 9 1 2147483646 |
这题是高精度除以低精度的题目。。。
思路是这样:a的第n位整除以b以后。把得到的结果存在一个新数组的第n位。然后剩余的余数保留下来、下一位除的时候加上这些剩余的余数。。
然后输出的时候。就从头开始遇到非0开始输出。。。
要注意a = 0的情况要单独考虑, 还有就是那个余数要用long long 来存。。因为b最大为INT_MAX ,所以完全可能在求余之前那个数是大于b的,也就超过了int。。。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> char a[1005]; int b; int A[1005]; char c[1]; void chu() { int lena = strlen(a); long long num = 0; int i, j; for (i = 0; i < lena; i ++) { A[i] = (a[i] - '0' + num * 10) / b; num = (a[i] - '0' + num * 10) % b; } for (i = 0; i < lena; i ++) if (A[i]) break; for (j = i; j < lena; j ++) printf("%d", A[j]); printf("\n"); } void yu() { int lena = strlen(a); long long num = 0; int i; for (i = 0; i < lena; i ++) { num = (a[i] - '0' + num * 10) % b; } printf("%lld\n", num); } int main() { while (scanf("%s%s%d", a, &c, &b) != EOF) { memset(A, 0, sizeof(A)); if (strcmp(a, "0") == 0) { printf("0\n"); continue; } if (c[0] == '/') { chu(); } if (c[0] == '%') { yu(); } } return 0; }
相关文章推荐
- uva 10494 If We Were a Child Again(高精度与低精度求模和商)
- Uva 10494 If We Were a Child Again(高精度相除)
- UVA 10494 - If We Were a Child Again(高精度除法和取余)
- UVa 10494 If We Were a Child Again (高精度)
- UVA 10494 (暑假-高精度 -D - If We Were a Child Again)
- (高精度运算4.7.27)UVA 10494 If We Were a Child Again(大数除法&&大数取余)
- UVA 10494 - If We Were a Child Again(高精度除法和取余)
- If We Were a Child Again - UVa 10494 高精度
- (高精度运算4.7.27)UVA 10494 If We Were a Child Again(大数除法&&大数取余)
- UVA 10494 - If We Were a Child Again
- UVa:10494 - If We Were a Child Again
- uva 10494 If We Were a Child Again
- UVA - 10494 If We Were a Child Again
- UVA10494 - If We Were a Child Again
- Uva 10494 If We Were a Child Again
- UVA 10494 If We Were a Child Again(大数)
- UVa 10494 - If We Were a Child Again
- UVa UVa 10494 - If We Were a Child Again
- UVa 10494 - If We Were a Child Again
- UVA - 10494 If We Were a Child Again