C程序部分算法专注于寻找类似阿姆斯特朗的数字

时间:2015-01-30 10:30:35

标签: c

我的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;
} 

感谢您的回答。

2 个答案:

答案 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;
}

结果:

enter image description here

答案 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");
    }
}