用户输入100~999999范围之内的任意数(如果不是此范围,则报错),判断是否是自方幂数,用户可以反复输入判断直到不需要为止。自方幂数: 一个n位正整数如果等于它的n个数字的n次方和,该数称为n位自方幂数
int f(int i){
if(i < 10) return i;
return (i%10)*f(i/10);
}
int main(){
int i;
while(cin>>i) //把cin变成scanf输入即可,因为c++比较容易写,我就统一用C++的输入输出了
{
if(i==0)
break; //设置输入0结束循环输入
if(i999999){
cout<<"Wrong!"<<endl;
} else {
cout<<f(i)<<endl;
}
}
}
大体思路,没有具体执行,可能有错
#include
int main(void)
{
int input;
char ch;
do
{
printf("Input your number 100~999999: ");
scanf("%d", &input);
if (checkNum(input))
{
printf("number %d is 自方幂数\n", input);
} else
{
printf("number %d is not 自方幂数\n", input);
}
printf("是否继续?y or n: ");
scanf(" %c", &ch);
} while (ch == 'y' || ch == 'Y');
return 0;
}
int checkNum(int num)
{
int i[6], j, k, m;
int sum, temp;
if (num < 100 || num > 999999)
{
printf("num[%d] not between 100 and 999999\n", num);
return 0;
}
i[0] = num / 100000;
i[1] = num / 10000 % 10;
i[2] = num / 1000 % 10;
i[3] = num / 100 % 10;
i[4] = num / 10 % 10;
i[5] = num % 10;
k = 6;
for (j = 0; j < 6; j++)
{
if (i[j] > 0)
{
break;
} else
{
k--;
}
}
sum = 0;
for (j = 0; j < 6; j++)
{
if (i[j] != 0)
{
temp = 1;
for (m = 0; m < k; m++)
{
temp = temp * i[j];
}
sum += temp;
}
}
if(sum == num)
{
return 1;
} else
{
return 0;
}
}
#include
int main()
{
printf("输入一个大于100小于999999的数\n");
int x;
scanf_s("%d", &x);
if (x < 100 || x>999999)
{
printf("错误的数!\n");
return 0;
}
if (x >= 100 && x <= 999)
{
int a, b, c,s;
for (a = 1; a < 10; a++)
{
for (b = 0; b < 10; b++)
{
for (c = 0; c < 10; c++)
{
s = 100 * a + 10 * b + c;
if (s == (a*a*a + b*b*b + c*c*c) && s == x)
printf("yes\n");
else printf("no\n");
return 0;
}
}
}
}
return 0;
}
大神我这段代码的思想为什么不行啊?