以下是我用C語言寫的
#include <stdio.h>
#include <math.h>
int g();
int main()
{
long input;
while(scanf("%ld", &input)==1)
{
long tmp_sum=0;//暫存總和
tmp_sum=input;
if(tmp_sum!=0)
{
do{
tmp_sum=g(tmp_sum);
}while(tmp_sum/10!=0);//繼續迴圈的條件:tmp_sum不為個位數,即除以10不為0
printf("%ld\n", tmp_sum);
}
}
return 0;
}
int g(long n)
{
int count=0;//判斷幾位數
long tmp_n=n;
while(tmp_n != 0)
{
tmp_n /= 10;
++count;
}
int sum=0;
long lim=0;
lim=pow(10,count);
for(int i=10;i<=lim;i*=10)
{
sum=sum+(n%10);
n=n/10;
}
return sum;
}
以下是我用C++寫的
#include <iostream>
using namespace std;
int f(int a){
if (a<10)
{
return a;
}
int sum=0;
while (a>0)
{
sum+=a%10;
a/=10;
}
return f(sum);
}
int main()
{
int n;
while (cin >> n)
{
if (n==0){
break;
}
cout << f(n) <<endl;
}
}
比較無法理解的是,我用C需要使用long long 的變數型態,但C++卻只需要用int 的變數型態
如果C只用int 或是long int ,那麼當測資為1234567892時,就會沒有output
請問有哪個大神知道為何會這樣嗎?
for(int i=10;i<=lim;i*=10)
i會overflow,要改用log
for(int i=10;i<=lim;i*=10)
i會overflow,要改用log
打錯,改用long