3061488_ac_0ms_156k.cpp
来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 176 行
CPP
176 行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char nn[257][10];
void solve(char num[])
{
int i;
for(i = strlen(num)-1; i >= 0; i--)
{
if(num[i]>' ')
{
num[i+1] = '\0';
break;
}
}
for(i = 0; num[i]; i++)
{
if(num[i]>' ')
{
strcpy(num,&num[i]);
return ;
}
}
}
void add(char a[],char b[])
{
int i, l, w, t;
int l1, l2;
l1 = strlen(a);
l2 = strlen(b);
l = l1>l2?l1:l2;
w = 0;
for(i = 0; i < l; i++)
{
if(i>=l1)
a[i] = '0';
if(i>=l2)
b[i] = '0';
t = a[i]+b[i]-'0'-'0'+w;
if(t>=10)
t%=10,w=1;
else
w = 0;
a[i] = t + '0';
}
if(w)
a[i++] = '1';
a[i] = '\0';
}
void reverse(char str[])
{
int i, l;
char ch;
l = strlen(str);
for(i = 0; i < l/2; i++)
{
ch = str[i];
str[i] = str[l-1-i];
str[l-1-i] = ch;
}
}
void multi(char a[],char b[])
{
int i, p, w, j;
int l1, l2, tmp;
char ans[100];
if(strcmp(a,"0")==0||strcmp(b,"0")==0)
return ;
l1 = strlen(a);
l2 = strlen(b);
p = 1;
for(i = 0; i < 100; i++)
ans[i] = '0';
for(i = 0; i < l2; i++)
{
w = 0;
for(j = 0; j < l1; j++)
{
tmp = (a[j]-'0')*(b[i]-'0')+w;
tmp += ans[j+i]-'0';
ans[j+i] = tmp%10+'0';
w = tmp/10;
}
if(w)
ans[j+i] = '0'+w;
}
if(w)
p = 0;
ans[j+i-p] = '\0';
strcpy(a,ans);
}
void calc(char ret[],char num[],int base)
{
char b[100];
int i;
char tmp[100];
itoa(base,b,10);
reverse(b);
strcpy(ret,"0");
for(i = 0; num[i]; i++)
{
multi(ret,b);
strcpy(tmp,nn[num[i]]);
add(ret,tmp);
}
}
int main()
{
int i;
char ans[100];
char base[100], num[100];
if(scanf("%s",base)!=1)
return 0;
solve(base);
for(i = 0; base[i]; i++)
{
itoa(i,nn[base[i]],10);
reverse(nn[base[i]]);
}
getchar();
while(1)
{
while(gets(num))
{
if(strlen(num)==0)
break;
solve(num);
strcpy(ans,"0");
for(i = strlen(base)-1; i > 0; i--)
{
char tmp[300];
calc(tmp,num,i+1);
add(ans,tmp);
if(strchr(num,base[i]))
{
break;
}
}
reverse(ans);
puts(ans);
}
printf("\n");
while(1)
{
if(gets(num)==NULL)
return 0;
if(strlen(num)!=0)
{
strcpy(base,num);
solve(base);
for(i = 0; base[i]; i++)
{
itoa(i,nn[base[i]],10);
reverse(nn[base[i]]);
}
break;
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?