您的位置:首页 > 其它

ACMSTEP 1.2.4 ecimal System //水题 模拟 活用Sprintf和sscanf

2011-08-07 22:36 351 查看

decimal system

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 718 Accepted Submission(s): 312

[align=left]Problem Description[/align]
As we know , we always use the decimal system in our common life, even using the computer. If we want to calculate the value that 3 plus 9, we just import 3 and 9.after calculation of computer, we will get the result of 12.

But after learning <<The Principle Of Computer>>,we know that the computer will do the calculation as the following steps:

1 computer change the 3 into binary formality like 11;

2 computer change the 9 into binary formality like 1001;

3 computer plus the two number and get the result 1100;

4 computer change the result into decimal formality like 12;

5 computer export the result;

In the computer system there are other formalities to deal with the number such as hexadecimal. Now I will give several number with a kind of change method, for example, if I give you 1011(2), it means 1011 is a number in the binary system, and 123(10) means
123 if a number in the decimal system. Now I will give you some numbers with any kind of system, you guys should tell me the sum of the number in the decimal system.

[align=left]Input[/align]
There will be several cases. The first line of each case contains one integers N, and N means there will be N numbers to import, then there will be N numbers at the next N lines, each line contains a number with such form : X1….Xn.(Y),
and 0<=Xi<Y, 1<Y<=10. I promise you that the sum will not exceed the 100000000, and there will be at most 100 cases and the 0<N<=1000.

[align=left]Output[/align]
There is only one line output case for each input case, which is the sum of all the number. The sum must be expressed using the decimal system.

[align=left]Sample Input[/align]

3
1(2)
2(3)
3(4)

4
11(10)
11(2)
11(3)
11(4)


[align=left]Sample Output[/align]

6
23


我真想不到 如果不用sscanf和sprintf这道题应该怎么做。

不过还是很简单的。任意进制转换十进制的方法也要会。

还要注意:比赛中不应该用Atoi这套函数 因为不是ANSI C的标准库函数。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
long change(int n, int bases)
{

long i, temp = 0, len;
char ex[30];
sprintf(ex,"%d",n);
len = strlen(ex);
for (i = 0; i<len; i++)
{
temp+= (ex[i]-'0') * (long)pow((double)bases,(double)len-1-i);
}
return temp;
}

int main()
{
//	freopen("c:\\in.txt","r",stdin);
int i, cases, j, sum, b, nums;
char str[30];
while(cin>>cases)
{
sum = 0;
for (i=0; i<cases; i++)
{
cin>>str;
sscanf(str,"%d(%d)",&nums,&b);
sum += change(nums, b);
}
cout<<sum<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: