题目:设n是一给两位正整数,s1是n的各位数之和,s2a是2*n的各位数之和。若s1=s2,则n是9的倍数。输出所有满足这些条件的n、s1、s2.
请问为什么这个代码运行出来没有反应啊?
#include
using namespace std;
int f1(int a)
{
int s1=0;
while(a)
{
s1=s1+a%10;
a=a/10;
}
return s1;
}
int f2(int b)
{
int s2=0;
while(b)
{
s2=s2+2*b%10;
b=2*b%10;
}
return s2;
}
int main()
{ int n;
for(n=9;n>9&&n<100;n++)
{
if((f1(n)==f2(n))&&(n%9==0))
cout<return 0;
}
1、主函数main中的for循环初始值为9,而n> n<100,因此不会进入for循环,应改为n>8.
2、f1和f2的while是死循环,a和b的值为9-100,永远是true.应改为 !a 和 !b.一开始不要使用这种简写的语法,就写成a!=0 b!=0即可
3、建议把 if else配对使用,else也写出来打印一些东西,方便你理解程序的执行。
#include <iostream>
using namespace std;
int f1(int a)
{
int s1 = 0;
while (!a)
{
s1 = s1 + a % 10;
a = a / 10;
}
return s1;
}
int f2(int b)
{
int s2 = 0;
while (!b)
{
s2 = s2 + 2 * b % 10;
b = 2 * b % 10;
}
return s2;
}
int main()
{
int n;
for (n = 9; n > 8 && n < 100; n++)
{
if ((f1(n) == f2(n)) && (n % 9 == 0))
cout << n << endl;
else
cout << "qwer"<<endl;
}
return 0;
}