使用c语言存储多个值而不使用数组

时间:2016-01-22 23:59:23

标签: c

必须反转数字并获得正常和反向数字之间的差异。  输入由N个数组成,其中N是任意正整数。输入的第一行    仅包含正整数N.然后跟随一个或多个具有N个数字的行;这些数字     应该都是非负的,可以是单个或多个数字。这些是您需要的原始数字    生成N个相应的幻数。

我在考虑使用while循环并且一次只做一个输入,任何人都有任何想法?

到目前为止我有什么

#include <stdio.h>

int reverseInteger();
int generateMagicNumber();

int main()
{
    int n,i;
    char all;
    printf("How many magic numbers do you want");
    scanf("%d",&n);

    while (i<n){        //
        while (n != 0) //reversing number
            {
                rev = rev * 10;
                rev = rev + n%10;
                n = n/10;
                i++;
                all =  n;
            }
    }
}

作业1:

  

反向数字魔术序列

     

截止日期:2016年1月27日星期三美国东部时间晚上11:59

     

反向数字是用阿拉伯数字写的数字,但是在哪里   数字顺序颠倒过来。第一个数字成为最后一个数字   反之亦然。例如,数字反转时的数字1245   将变为5421.请注意,省略所有前导零。那   表示如果数字以零结尾,则通过反转丢失零   (例如1200给出21)。另请注意,反转的数字从来没有   尾随零。最后,每个数字(即0-9)就是它   拥有反向号码。为了生成幻数,我们反转a   给出原始数字并存储差异的绝对值   原始数字与其反转版本之间。例如,   给定数字476,我们将生成反向数字674然后   计算476和674之差的绝对值   然后我们将198反向显示数字891;我们称之为神奇数字!

     

我们需要你的帮助来计算给定序列的幻数。   你的任务是计算给定数字和之间的差异   它的反向版本,并输出相反的差异。的   当然,结果并不是唯一的,因为任何特定的数字都是a   反转形式的几个数字(例如21可能是12,120或1200   在逆转之前)。因此,我们必须假设没有丢失零   反转(例如假设原始数字是12)。

     

输入
  该   输入由N个数组成,其中N是任意正整数。   输入的第一行只包含一个正整数N.然后   跟随一个或多个具有N个数字的行;这些数字应该全部   是非负的,可以是单个或多个数字。这些是   您需要生成N对应魔法的原始数字   数字。

     

输出
  对于序列中的每个原始编号,打印   正好一个整数 - 它的幻数。省略任何前导零   输出。在单独的行上,输出最大的绝对差值   在序列中遇到。样本输入

6
24 1 4358 754 305 794
Sample Output
81 0 6714 792 891 792
4176
     

具体要求:[15分]

     
      
  • [3 pts]编写一个名为reverseInteger的函数,它将无符号整数作为输入,并将其反转数字版本作为   无符号整数。
  •   
  • [3 pts]编写一个名为generateMagicNumber的函数,该函数将无符号整数作为输入,并返回其幻数,如   问题。
  •   
  • [3 pts]正确显示幻数序列。 (显示在脚本文件中)
  •   
  • [2 pts]显示最大的绝对差异(显示在脚本文件中)
  •   
  • [3 pts]使用能够处理任何序列输入并生成序列的主函数演示完整程序   相应的输出。
  •   
  • [1 pt]在CS服务器gcc编译器上进行编译,没有错误和警告。
  •   
     

未能正确记录您的整个代码将收到标记   零。

     

您要提交以下内容:

     
      
  • 源代码文件:assign1.c
  •   
  • 演示编译和执行的脚本文件:assign1.txt
  •   
     

要生成脚本文件,请使用CS中的以下命令   服务器:

cp assign1.c assign1.backup
typescript assign1.txt
cc assign1.c
a.out
[test your code here with at least 3 different input test cases in addition to the example given]
exit
[These steps will create a file called assign1.txt. Do not edit its contents - just submit it!]
     

提示:此表解释了此示例中完成的工作:

Originalnumber
Reverse Absolute difference
Reverse (Magic number)

X Xr |X-Xr| |X-Xr|r
24 42 18 81
1 1 0 0
4358 8534 4176 6714
754 457 297 792
305 503 198 891
794 497 297 792
     

请注意,您的程序不应该使用数组,并且应该能够   读取N大小的序列,对于任何N值(32位整数)。的   当然,应该考虑内存空间优化   无需在任何给定的情况下一次性将所有N个数字存储在存储器中   时间。

1 个答案:

答案 0 :(得分:1)

您应该在while循环的每次迭代中读取一个新数字:

#include <stdio.h>

int reverseInteger();
int generateMagicNumber();

int main() {
    int n, i;
    char all;
    printf("How many magic numbers do you want");
    if (scanf("%d", &n) != 1)
        return 1;

    for (i = 0; i < n; i++) {
        int num, temp, rev, magic;
        if (scanf("%d", &num) != 1)
            return 2;

        rev = 0;
        temp = num;
        while (temp != 0) { //reversing number
            rev = rev * 10;
            rev = rev + temp % 10;
            temp = temp / 10;
        }
        if (rev < num)
            magic = num - rev;
        else
            magic = rev - num;
        printf("%d ", magic);
    }
    printf("\n");
    return 0;
}

如果您在一行中输入所有数字,答案将显示在其下方的一行中。