法1:
使用long long这种类型,是存不下输入的大整数的
所以以下的程序,虽然逻辑上是正确的,但是实际上会出错
#include <stdio.h>
long power(long a,long b)//a^b
{
long M=a;
while(--b)
M*=a;
return M;
}
int main()
{
long long Num=0;
long long tmp=0;
while(scanf("%d",&Num)!=EOF)
{
long i=0,Sum=0;
tmp=Num%10;
Num/=10;
while(Num)
{
Sum+=(tmp*(power(2,i+1)-1));
i++;
tmp=Num%10;
Num/=10;
}
Sum+=(tmp*(power(2,i+1)-1));
printf("%d\n",Sum);
}
return 0;
}
法2:
正确的做法是将超大整数当成字符串来处理
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 25
int main()
{
char BigInt[MAX]={0};
while(scanf("%s",BigInt)!=EOF)
{
int Sum=0;
int L=strlen(BigInt);
for(int i=1;i<=L;i++)
{
Sum+=((BigInt[i-1]-'0')*(pow(2,L-i+1)-1));
}
printf("%d\n",Sum);
}
return 0;
}