C数字的总和提升到他们的位置的力量

时间:2017-03-15 21:45:13

标签: c

我正在尝试编写一个C程序,计算一个数字的位数之和,以及它们位置的幂。

例: 用户输入5672, 输出应为5^1 + 6^2 + 7^3 + 2^4。 数字5中的第一个数字被提升为幂1,因为它是第一个数字。在每种情况下都是相同的逻辑。

我已经提出了计算数字位数之和的代码,但是,我无法生成有关如何将这些数字提升到某个幂的代码。

#include <stdio.h>
#include <math.h>

int main() {
    long num, digit, sum = 0;
    int countDigits = 0;
    long temp = num;
    int i;

    printf("Enter the number \n");
    scanf("%ld", &num);
    temp = num;
    while (num > 0) {
        digit = num % 10;
        sum  = sum + digit;
        num /= 10;
    }
    printf("Given number = %ld\n", temp);
    printf("Sum of the digits %ld = %ld\n", temp, sum);

    while (temp > 0) {
      countDigits += 1;
      temp /= 10;
    }

    i = 0;
    sum = 0;
    while (num > 0) {
        digit = num % 10;
        sum = sum + pow(digit, countDigits);
        countDigits -= 1;
        num /= 10;
    }

    printf("The final sum is %d\n", sum);
}

2 个答案:

答案 0 :(得分:3)

这很简单,创建一个额外的功能,你发送数字位置+它自己的数字,该函数将返回数字^ i。将其添加到总和中。

int countDigits = 0
int temp = num
while (temp > 0)
{
    countDigits += 1;
    temp /= 10;
}

i = 0;
sum = 0;
while (num > 0)
{
    digit = num % 10;
    sum  = sum + pow(digit, countDigits);
    countDigits -= 1;
    num /= 10;
}

答案 1 :(得分:0)

不是读取数字然后尝试总结有力数字,而是一次性完成所有操作会更容易。

这是一个解决方案,它使用ipow - 通过平方使用取幂来将x提升到幂n。您可以使用n次循环来替换它,因为n不能变得非常大。

#include <stdio.h>

long ipow(long x, int n) {
    long r = 1;
    while (n) {
        if (n % 2) r *= x;
        x *= x;
        n >>= 1;
    }
    return r;
}

int main() {
    long sum = 0;

    printf("Enter the number \n");
    long n = 0;
    for (int pos = 1; ; pos++) {
        int c = getchar() - '0';
        if (c < 0 || c > 9) break;
        sum += ipow(c, pos);
        n = 10 * n + c;
    }
    printf("Number is: %ld\n", n);
    printf("Powered digit sum is: %ld\n", sum);
}