当前位置: 首页 > 知识库问答 >
问题:

偶数位和奇数位的位数总和

贡建修
2023-03-14
int sumeven = 0, sumodd = 0, num, remainder, c;
scanf("%d", &num);
c = 0;
while (num) {
    remainder = num % 10;
    c++;
    if (c % 2 == 0) {
        sumeven = sumeven + remainder;
    } else
    if(c % 2 != 0) {
        sumodd = sumodd + remainder;
    }
    num = num / 10;
}
printf("sum of digits at even pos: %d\n sum of digits at odd pos: %d", 
       sumeven, sumodd);

所以问题是当 num 中有奇数位时,程序运行良好,它分别给出偶数位置和奇数位置的数字总和,但当有偶数位时出现问题。当有偶数位数时,sumeven 存储奇数位的总和,反之亦然。为什么会发生这种情况以及如何解决?

在网上搜索了一下,我开始知道这可以修复,在while循环后添加以下代码

if (c % 2 == 0) {
    temp = sumeven;
    sumeven = sumodd;
    sumodd = temp;
}

但我不明白这段代码是如何工作的(我知道它交换 sumevensumodd,但为什么当 c 是偶数时它会这样做?

共有1个答案

娄学文
2023-03-14

非常简单的答案,您从末尾而不是从头开始计算,因此对于奇数位数,您需要交换结果。

#include <stdio.h>

int sum(long long n, unsigned *odd, unsigned *even)
{
    int e = 0;
    int digit;
    *odd = *even = 0;
    while(n)
    {
        digit = n % 10;
        if(e & 1) 
            *even += digit;
        else 
            *odd += digit;
        n /= 10;
        e++;
    }
    if(e & 1)
    {
        unsigned tmp = *odd;
        *odd = *even;
        *even = tmp;
    }
    return e;
}

int main(void) {
    unsigned e,o;

    int num = sum(123, &o, &e);
    printf("num = %d    odd = %d\teven = %d\n", num, o, e);
    return 0;
}
 类似资料:
  • 本文向大家介绍在C ++中找到偶数和奇数位数的数字总和,包括了在C ++中找到偶数和奇数位数的数字总和的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个整数N,我们必须找到奇数位和偶数位的和。因此,如果数字是153654,则odd_sum = 9,even_sum = 15。 为了解决这个问题,我们可以从最后一位提取所有数字,如果原始数字的位数是奇数,则最后一位必须是奇数位,否则将是偶数位。

  • 本文向大家介绍在C ++中计算整数中的偶数和奇数位,包括了在C ++中计算整数中的偶数和奇数位的使用技巧和注意事项,需要的朋友参考一下 给我们一个整数,任务是计算一个数字中的偶数和奇数。另外,我们将继续检查整数中的偶数是否出现偶数次,并且整数中的奇数位是否出现奇数次。 例如 说明-是的,此外,偶数出现偶数次,即2,奇数位出现奇数次,即3 说明-:否,因为偶数出现的次数是奇数,即3,而奇数出现的次数

  • 本文向大家介绍Java中二叉树的奇数位置和偶数位置节点之和之间的差,包括了Java中二叉树的奇数位置和偶数位置节点之和之间的差的使用技巧和注意事项,需要的朋友参考一下 问题陈述 对于给定的二叉树,编写一个程序以查找奇数位置和偶数位置的节点总和之差。假设根位于0级,奇数位置,根的左/右子级位于2级,左子级位于奇数位置,右子级位于偶数位置,依此类推。 示例 解 使用级别顺序遍历。在遍历期间,将第一个元

  • NowCoder 题目描述 需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。 解题思路 方法一:创建一个新数组,时间复杂度 O(N),空间复杂度 O(N)。 // java public void reOrderArray(int[] nums) { // 奇数个数 int oddCnt = 0; for (int x : nums) i

  • 本文向大家介绍编写Golang程序以使用位运算查找奇数和偶数,包括了编写Golang程序以使用位运算查找奇数和偶数的使用技巧和注意事项,需要的朋友参考一下 例子 输入num = 5 => 101&1 = 001 => True,即Odd;否则num将是偶数。 解决这个问题的方法 步骤1: 定义一个接受数字的方法。 第2步:使用该编号执行和操作。 步骤3:如果&运算符返回非零值,则该数字将为奇数。

  • 一、题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分。 二、解题思路 这个题目要求把奇数放在数组的前半部分, 偶数放在数组的后半部分,因此所有的奇数应该位于偶数的前面。也就是说我们在扫描这个数组的时候, 如果发现有偶数出现在奇数的前面,我们可以交换它们的顺序,交换之后就符合要求了。 因此我们可以维护两个指针,第一个指针初始化时

  • 本文向大家介绍在JavaScript数组的偶数位置执行数字?,包括了在JavaScript数组的偶数位置执行数字?的使用技巧和注意事项,需要的朋友参考一下 要从偶数位置访问数字,而不是遍历数字,请遍历位置, 即index。如果我们遍历数字,而不是偶数元素,则将访问偶数。  示例 在以下示例中,使用for循环遍历所有位置,并使用空字符串访问偶数位置值。该 条件语句“如果”是用来检查位置是偶数与否。如

  • 我很想知道是否有一种更优雅的方法来尝试找到Java8中字符串中奇数位置的位数之和。 这是我目前的职责 仍然不熟悉Streams和Java8,并认为也许你可以这样做: 欢迎任何建议。