C中奇偶位数字之和
我需要在一个整数中的偶数和奇数处加上数字。比如说,让数字=1234567。偶数位数之和=2+4+6=12奇数位数之和=1+3+5+7=16 我目前拥有的代码是:C中奇偶位数字之和,c,C,我需要在一个整数中的偶数和奇数处加上数字。比如说,让数字=1234567。偶数位数之和=2+4+6=12奇数位数之和=1+3+5+7=16 我目前拥有的代码是: int returnsum(int num) { while (num) { rem = num % 10; sum = sum + rem; num = num / 10; } while (sum) { a = sum % 10; arr[i] = a: sum = s
int returnsum(int num) {
while (num) {
rem = num % 10;
sum = sum + rem;
num = num / 10;
}
while (sum) {
a = sum % 10;
arr[i] = a:
sum = sum / 10;
i++;
}
for (i = 0; a[i]; i += 2) {
summ = summ + a[i];
}
return summ;
}
void main() {
int n, m, oddSum = 0, evenSum = 0;
printf("Please insert the number for the program:");
scanf("%d", & n);
while (n != 0) {
oddSum += n % 10;
n /= 10;
evenSum += n % 10;
n /= 10;
}
printf("Sum of digits in even places:%d\n", evenSum);
printf("Sum of digits in odd places:%d\n", oddSum);
}
好的,让我们首先假设这个数字有偶数个数字,所以倒数第二个和倒数第二个分别位于奇数和偶数位置 然后,可以使用
编号%10
检索最后一个数字,使用(编号/10)%10
检索最后一个数字
所以,知道了这一点,你可以简单地循环这个数字,把这些值相加,除以100,直到得到一个小于10的数字
如果该数字为零,那么您关于原始数据的位数为偶数的假设是正确的,您可以退出
如果是非零(1..9
),那么您的假设是错误的,您应该交换迄今为止的偶数和奇数总和,然后将最后一位数字添加到奇数总和
伪代码如下所示:
def getEvenOdd (num):
even = 0
odd = 0
while num > 9:
even = even + (num % 10)
odd = odd + ((num / 10) % 10)
num = num / 100
if num > 0:
temp = even
even = odd
odd = temp
odd = odd + num
return (even,odd)
print getEvenOdd(1234567)
它的输出类似于(12,16)
伪代码看起来像初学者的Python并不是偶然的,因为该语言是完美的伪代码语言,前提是您不要弄乱它更复杂的角落。检查以下代码:
#include <stdio.h>
int main(void){
char p[20];
int i=0,even=0,odd=0,n;
scanf("%d",&n);
sprintf(p,"%d",n);
while(p[i] != '\0')
{
if(i%2 == 0)
odd+= (p[i] - '0');
else
even+= (p[i] - '0');
i++;
}
printf("%d\n",even);
printf("%d\n",odd);
return 0;
}
#包括
内部主(空){
charp[20];
int i=0,偶数=0,奇数=0,n;
scanf(“%d”和“&n”);
sprintf(p,“%d”,n);
而(p[i]!='\0')
{
如果(i%2==0)
奇数+=(p[i]-'0');
其他的
偶数+=(p[i]-'0');
i++;
}
printf(“%d\n”,偶数);
printf(“%d\n”,奇数);
返回0;
}
我的五美分。:)
要对其他数字求和,只需在每次迭代中除以100即可:
int sumodd(int num) {
int sum = 0, rem;
while(num) {
rem=num%10;
sum=sum+rem;
num=num/100);
}
return sum;
}
由于我们已经有了一个可以对其他数字求和的函数,我们可以重复使用它:
int sumeven(int num) {
return sumodd(num/10);
}
以下是您的问题的解决方案:
void main()
{
int n,m,oddSum=0,evenSum=0;
printf("Please insert the number for the program:");
scanf("%d",&n);
int flag=0;
int counter=1;
while (n!=0) {
if(counter%2==0)
{
evenSum += n % 10;
n /= 10;
}
else
{
oddSum += n % 10;
n /= 10;
}
counter++;
}
if(counter%2==0)
{
int temp=oddSum;
oddSum=evenSum;
evenSum=temp;
}
printf("Sum of digits in even places:%d\n",evenSum);
printf("Sum of digits in odd places:%d\n",oddSum);
}
显示你已经做了什么?我已经把数字倒过来,把它放在数组中,元素放在奇数或偶数的地方,但它太长了。倒过来怎么办?@almasshaikh我想他说的倒过来是指去掉每个数字的
%
和/
。这将自动反转。:-)请编辑您的帖子并在那里添加代码。正如目前所写,我无法找到rem
、sum
或sum
、a[I]
等的定义。
int sumeven(int num) {
return sumodd(num/10);
}
void main()
{
int n,m,oddSum=0,evenSum=0;
printf("Please insert the number for the program:");
scanf("%d",&n);
int flag=0;
int counter=1;
while (n!=0) {
if(counter%2==0)
{
evenSum += n % 10;
n /= 10;
}
else
{
oddSum += n % 10;
n /= 10;
}
counter++;
}
if(counter%2==0)
{
int temp=oddSum;
oddSum=evenSum;
evenSum=temp;
}
printf("Sum of digits in even places:%d\n",evenSum);
printf("Sum of digits in odd places:%d\n",oddSum);
}