我的C程序有问题。它的想法类似于阿姆斯特朗号检查。假设输入数字是123.程序需要检查是否有条件,例如123 = 1 ^ 1 + 2 ^ 2 + 3 ^ 3为真。我知道如何添加数字,但功能有问题。很明显,我需要一个从1到数字位数的循环。在Armstrong数字算法中,每个数字都有相似的功率。例如153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3。以下是我到目前为止的情况:
#include<stdio.h>
int main()
{
int n,d,s=0,o,i,k;
printf("n=");scanf("%d",&n);
d=n;
while(d!=0)
{
o=d%10;
s=s+o;
d=d/10;
k++
}
printf("sum:%d",s);
printf("number of digits:%d",k);
return 0;
}
感谢您的回答。
答案 0 :(得分:0)
首先需要得到数字的长度,用于确定进入循环计算每个位的次数。
例如,数字123,你首先需要知道数字是3比特len,然后你可以多次数字3三次,数字2两次,数字1一次。
我使用临时字符串来实现这个
这里是代码,你的一点点改动
#include <stdio.h>
#include <string.h>
#define MAX_NUM_LEN 16
int main()
{
char tmp_num[MAX_NUM_LEN] = {0};
int len,n,d,s=0,o,i,tmp_len, tmp_o;
printf("n=");scanf("%d",&n);
sprintf(tmp_num, "%d", n);
len = strlen(tmp_num);
tmp_len = len;
d=n;
while(d!=0)
{
o=d%10;
for (tmp_o = 1, i = tmp_len; i > 0; i--)
tmp_o *= o;
s=s+tmp_o;
d=d/10;
tmp_len--;
}
printf("sum:%d\n",s);
printf("number of digits:%d\n",len);
return 0;
}
结果:
答案 1 :(得分:0)
根据我的理解,我认为这是OP正在寻找的东西:
int power(int base, int exp)
{
if (base == 0) return 0;
int result=1;
while (exp-- > 0) result*=base;
return result;
}
void calculate(int number)
{
int d=number;
int tmpnumber=number;
int n=0;
while (d > 0)
{
n++;
d /=10;
}
printf("Number of digits: %d\n", n);
int k=0;
int sum=0;
while (n--)
{
// get digits from left to right
d=number / power(10, n);
k++;
sum+=power(d, k);
number %= power(10, n);
printf("%d^%d=%d\n", d, k, power(d, k));
}
printf("\n%5d %5d", tmpnumber, sum);
}
int main(int argc,char *argv[])
{
int value;
while (TRUE)
{
printf("Enter value (0 = Quit): ");
scanf("%d", &value);
if (value <= 0) return 0;
calculate(value);
printf("\n");
}
}