奇数位的C ++总和

时间:2014-12-03 12:16:15

标签: c++

我创建了一个程序,其中函数可以添加所有奇数位;但是,我想打印出所有奇数位,例如,sum_odd_digits(2139)返回1 + 3 + 9 = 13而sum_odd_digits(1024)返回1.

#include <iostream>
using namespace std;

int sum_odd_digits(unsigned int i){
      unsigned int a =0;
      while ((i !=0)&&(i%2 !=0)){
      a +=i%10;
      i/=10; 
} 
     cout << a;
}
int main(){
     sum_odd_digits(2139);
}

任何人都可以给我一些打印奇数位的提示吗? 谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

就是这样:

int sum_odd_digits(unsigned int i){
    unsigned int a = 0;
    while (i != 0){
        if ( i % 2 == 1 )
            cout << i % 10 << ' ';
        a += i % 10;
        i /= 10;            
    } 
    return a;
}

查看所有数字,如果数字是奇数则打印出来。它返回数字总和。

答案 1 :(得分:1)

你走在正确的轨道上。以下示例分隔数字的数字,如果它们是奇数,则打印它们。

代码清单


#include<stdio.h>

int main(){
  int num,temp,factor=1;

  printf("Enter a number: ");
  scanf("%d",&num);

  temp=num;
  while(temp){
      temp=temp/10;
      factor = factor*10;
  }

  printf("The odd digits of the number are: ");
  while(factor>1){
      factor = factor/10;
      switch (num/factor) {
         case 1:
         case 3:
         case 5:
         case 7:
         case 9:
            printf("%d ",num/factor);
            break;
      }
      num = num % factor;
  }

  return 0;
}

答案 2 :(得分:1)

while ((i !=0)&&(i%2 !=0))

一旦条件为假,这将立即停止;当i变为零时,或者当值为偶数时。但是,当您找到第一个偶数值时,您不想停止,您希望继续测试数字,并且仅在i变为零时停止。所以这个结构应该是

while (i != 0) {
    if (i % 2 != 0) {
        // final digit is odd
        a += i%10;
    }
    i/=10; 
}

如果您愿意,可以将最后一行压缩到for循环中

for (; i != 0; i /= 10)