我正在尝试编写一个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);
}
答案 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);
}