C语言,将数字折叠相加

将一个数字n(10≤n≤1,000,000,000)拆成左右两部分,将左边的数字逆转后与右边的数字相加,输出求得的和值 。

比如:123456,拆成:321+456=777
比如:147852,拆成:741+852=1593

如果数字的位数是奇数,则右半部分应比左半部少一位

比如:12345,拆成:321+45=366
比如:95078,拆成:059+78=137

img


#include <stdio.h>
#include <string.h>

int main() {
long long n;
scanf("%lld", &n);
char str[20]; // 假设n最多10位,再加上逗号和结束符,总共20位
sprintf(str, "%lld", n); // 将n转成字符串
int len = strlen(str);
int half = (len + 1) / 2;
long long left = 0, right = 0;
for (int i = 0; i < half; i++) {
left = left * 10 + (str[half - 1 - i] - '0'); // 计算左半部分
}
for (int i = half; i < len; i++) {
right = right * 10 + (str[i] - '0'); // 计算右半部分
}
printf("%lld\n", left + right);
return 0;
}
#include <stdio.h>

int reverse(int n) {
    int reversed = 0;
    while (n > 0) {
        reversed = reversed * 10 + n % 10;
        n /= 10;
    }
    return reversed;
}

int main() {
    int n;
    scanf("%d", &n);

    int left, right;
    int digits = 0;
    int temp = n;

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

    int divisor = 1;
    if (digits % 2 == 0) {
        divisor = 10;
    }
    left = n / (divisor * 10);
    right = n % (divisor * 10);

    left = reverse(left);
    right = reverse(right);

    printf("%d\n", left + right);
    
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^