王道机试 4.2 数位拆解 含练习
例4.1数位拆解
#include<stdio.h>
int main()
{
int x,y;
while(scanf("%d%d",&x,&y)!=EOF)
{
int buf1[11],buf2[11],size1=0,size2=0;
while(x!=0)
{
buf1[size1++]=x%10;
x=x/10;
}
while(y!=0)
{
buf2[size2++]=y%10;
y=y/10;
}
int ans=0;
for(int i=0;i<size1;i++)
for(int j=0;j<size2;j++)
ans=ans+buf1[i]*buf2[j];
printf("%d\n",ans);
}
return 0;
}
#include<stdio.h>
int main()
{
char x[11],y[11];
while(scanf("%s%s",x,y)!=EOF)
{
int ans=0;
for(int i=0;x[i]!=0;i++)
for(int j=0;y[j]!=0;j++)
ans=ans+(x[i]-'0')*(y[j]-'0');
printf("%d\n",ans);
}
return 0;
}
练1:反序数
#include<stdio.h>
int xnum(int x)
{
int buf[4];
for(int i=0;i<4;i++)
{
buf[i]=x%10;
x=x/10;
}
return buf[0]*1000+buf[1]*100+buf[2]*10+buf[3];
}
int main()
{
int x=1000;
while(true)
{
if(x*9==xnum(x))
break;
x++;
}
printf("%d",x);
return 0;
}
练2:对称平方数
#include<stdio.h>
int buf[10];
int size;
void chai(int x)
{
while(x!=0)
{
buf[size++]=x%10;
x=x/10;
}
}
bool is()
{
bool result=true;
for(int i=0;i<size/2;i++)
{
if(buf[i]!=buf[size-1-i])
{
result=false;
break;
}
}
return result;
}
int main()
{
for(int i=1;i<256;i++)
{
int x=i*i;
size=0;
chai(x);
if(is())
printf("%d\n",i);
}
return 0;
}
练3:Digital Root
#include<stdio.h>
int buf[10];
int size;
void chai(int x)
{
while(x!=0)
{
buf[size++]=x%10;
x=x/10;
}
}
int main()
{
int x;
while(scanf("%d",&x)!=EOF)
{
if(x==0)
break;
int tmp=x;
while(true)
{
if(tmp/10==0)
break;
size=0;
chai(tmp);
tmp=0;
for(int i=0;i<size;i++)
tmp=tmp+buf[i];
}
printf("%d\n",tmp);
}
return 0;
}