您的位置:首页 > 大数据 > 人工智能

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
 
“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 / b 或者 a % b。。。输出运算结果。。。

这题是高精度除以低精度的题目。。。

思路是这样: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: