ecchi上了一辆出租车,在他快要到达目的地时,却发现出租车的记费表有问题:当记费表的数字转到3的时候,下一个数字是5!他发现记费表的每一个位都有这种问题.例如,当里程表显示15339,记费表转动后,数字变为15350.这意味着他可能要付出更多的费用.他向司机反映了这一问题,但他们都无法算出实际上的费用是多少,你可以帮助他们吗?
Input
每一行有一个正整数M,1<=M<=999999999,记费表上显示的数字.若M为0,则输入结束(0不应该处理)
Output
对于每一个M,在单独一行中输出M,一个冒号':',一个空格,和实际上的费用.
Sample Input
13 15 2003 2005 239 250 1399 1500 999999 0
Sample Output
13: 12 15: 13 2003: 1461 2005: 1462 239: 197 250: 198 1399: 1052 1500: 1053 999999: 531440
这是我编的 程序 为什么到了14000多的时候就运行出错了?
#include<stdio.h>
int main()
{
long f(long);
long x;
for(scanf("%ld",&x);x!=0;scanf("%ld",&x))
printf("%ld: %ld\n",x,f(x));
return 0;
}
long f(long n)
{
if(n==3) return 3;
if(n%1000000000==400000000) return f(n-100000000);
if(n%100000000==40000000) return f(n-10000000);
if(n%10000000==4000000) return f(n-1000000);
if(n%1000000==400000) return f(n-100000);
if(n%100000==40000) return f(n-10000);
if(n%10000==4000) return f(n-1000);
if(n%1000==400) return f(n-100);
if(n%100==40) return f(n-10);
if(n%10==4) return f(n-1);
else return(f(n-1)+1);
}
PS:小弟是初学者,见笑啦