例题来源:谭浩强《C语言程序设计》第五版:习题5.5
如题,a表示一个数字,n表示a的位数,n由键盘输入。例如:2+22+222+2222+22222(此时a=2,n=5)
计算这些相加时,首先应该知道2 22 222 2222 22222从何而来,如何显示?我们发现每次都增一位,前面我们说过了如何取个位(n%10),扔个位(n/0),这里使用了除法,试想,每次多一位是不是可以使用乘法,这个显然是可以实现的。比如010+2=2;210这不就是20再加上2等于22,22再*10还需要再加2不就等于222…以此类推,代码如何实现呢?完整代码如下:
#include<stdio.h>
int Num(int a,int n)//示例(2,5)
{
int tmp=0;
for(int i=0;i<n;i++)
{
tmp=tmp*10+a;//
}
return tmp;
}
int main()
{
printf("%d\n",Num(2,5));
return 0;
}
实现了2 22 222 2222之类的显示,那他们加起来又如何实现呢?需要的时候调用前面的Num函数就对了,代码实现如下:
int Sum(int a,int n)//示例(2,5)
{
int tmp=0;
for(int i=1;i<=n;i++)//**注意一定是<=加上等于这个调试中会发现错误**
{
tmp+=Num(a,i);//**注意是i而不是n**Num函数不再显示细节在上面已有
}
return tmp;
}
int main()
{
printf("%d\n",Sum(2,5));
return 0;
}
如此一来,用了两个函数,问题得到了解决,题目乍一看是有一些难,把它拆开就容易了许多,并且要善于利用自己写过的函数。
下面还有一个类似思想的例题:来源于谭浩强《C语言程序设计》第五版:习