其实这是一个很简单的数学规律题,只要想明白每次跳变会会少多少个数就差不多能出解了,比如个位上2~4少1个数,7~9又少一个数,十位数29~40少了10个数那么,再如299-400少了100个数,那么反观来看,就变成进制问题,因为每一位都会发生两次跳变,那么也就从十进制变成了八进制,这样把每一位的数字按八进制来算即可出解。
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int p(int a,int b){
int ans=1;
for(int i=1;i<=b;i++)ans*=a;
return ans;
}
int main(){
char str[15];
while(scanf("%s",str)&&str[0]!='0'){
int len=strlen(str);
int ans=0;
for(int i=0;i<len;i++){
if(str[i]>='3'&&str[i]<='7')ans+=(str[i]-'1')*p(8,len-1-i);
else if(str[i]>'7')ans+=(str[i]-'2')*p(8,len-1-i);
else ans+=(str[i]-'0')*p(8,len-1-i);
}
printf("%s: %d\n",str,ans);
}
return 0;
}