注册 登录
编程论坛 C语言论坛

输入多个数(用回车隔开),求它们的反序数的和,输入非数字时结束。

sfb43 发布于 2020-05-27 11:19, 2753 次点击
对键盘输入的任意一组正整数(位数任意),求所有数的反序数之和,这里的反序数是指对该数从右向左顺序读得到的数,例如123的反序数是321,1200的反序数是21。输入非数字时结束程序。
6 回复
#2
吕孟伟2020-05-27 16:12
程序代码:
#include <stdio.h>

 
int foo(int n)
{
    int sum = 0;
    while(n)
    {
        int temp = n % 10;
        sum = sum * 10 + temp;
        n /= 10;
    }
    return sum;

}
int main(void)
{
    int a;
    int value = 0;
    int status = scanf("%d", &a);
    while(status==1){
        value += foo(a);
        status = scanf("%d", &a);
    }
    printf("value is %d\n", value);
    return 0;
}
#3
lin51616782020-05-27 17:35
100 反序数是什么 001 还是 1
#4
纯蓝之刃2020-05-27 18:02
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char **array,ch;
    int num=0,i=1,j;
    int start=0;

    array=(char**)calloc(num+1,sizeof(char*));
    *(array+num)=(char*)calloc(i+1,sizeof(char));

    while(1)
    {
        ch=getchar();
        if(ch>='0'&&ch<='9')
        {
            *(*(array+num)+i)=ch;
            i++;
            *(array+num)=(char*)realloc(*(array+num),(i+1)*sizeof(char));
        }
        else if(ch=='\n')
        {
            *(*(array+num))=i;      //上一个数据计长度
            num++;
            i=1;
            array=(char**)realloc(array,(num+1)*sizeof(char*));
            *(array+num)=(char*)calloc(i+1,sizeof(char));
        }
        else
        {
            *(*(array+num))=i;      //上一个数据计长度
            break;
        }
    }

    //printf("num=%d\n",num);
    for(i=0; i<=num; i++)
    {
        for(j=*(*(array+i))-1; j>0; j--)
        {
            if(*(*(array+i)+j)=='0'&&start==0)
                continue;
            start=1;
            printf("%c",*(*(array+i)+j));
        }
        start=0;
        printf("\n");
    }

    for(i=0; i<=num; i++)
        free(*(array+i));
    free(array);

    return 0;
}


[此贴子已经被作者于2020-5-27 18:07编辑过]

#5
sfb432020-05-28 11:22
回复 3楼 lin5161678
001的反序数是1
#6
sfb432020-05-28 11:34
回复 2楼 吕孟伟
可以使用嵌套循环来解决这个问题吗?
#7
sfb432020-05-28 13:14
谢谢啦,写出来了
1