【问题标题】:adding digits in an array c++在数组c ++中添加数字
【发布时间】:2018-09-29 08:47:13
【问题描述】:

我是 C++ 新手,我试图了解如何使用数组。我的想法是:

  1. 我希望用户输入一个数组,程序输出 数组
  2. 将数组中的所有值加倍并输出
  3. 并且对于每个加倍的值,添加加倍的数字的数字 (1位数字将保持不变),然后将新数字输出为 好吧。

(例如,如果数组是 [5, 6, 7, 8],则加倍的值将是 [10, 12, 14, 16],然后您将添加每个值的数字,例如 [1+0, 1+ 2, 1+4, 1+6] 得到 [1, 3, 5, 7]。

我把我的代码展示我的进度,请随时指出过程中的任何错误!

感谢任何帮助!

附言嵌套循环不起作用:(

#include <iostream>
#include <string>

using namespace std;

int maxNum;
int num[20];

int main()
{
  cout << "Enter an Array" << endl;
  for (int i=0;i<20;i++)
  {
      cin >> num[i];
      maxNum++;
      if (num[i]==-1)
      break;
  }

  cout <<"Your array is: " << endl;

  for (int i=0;i<maxNum-1;i++)
  cout << num[i];

  cout << endl;

    cout << "Your doubled array is:" << endl;

    for (int j=0;j<maxNum-1;j++)
    {
    num[j]*=2;
    cout << num[j];
    }

    cout << endl;

    cout << "When the digits of each seat are added..." << endl;

    for (int k=0;k<maxNum;k++)
    {
       for (int l=0;l<maxNum;l++)
       {
           int sum[20];
           while (num[k]!=0)
           {
           sum[l]=sum[l]+num[k]%10;
           num[k]=num[k]/10;
           }
       }
       cout << sum[l];
    }
    cout << endl;
}

【问题讨论】:

    标签: c++ arrays integer


    【解决方案1】:

    一些事情:

    • maxNum 和 num[] 永远不会初始化,这很危险。
    • 这不是您扫描输入的方式。理想情况下,你会像while(cin &gt;&gt; tem_var){} 那样做。或者您可以将其修改为if( !(cin &gt;&gt; num[i]) ) break;。这样你以后也不需要maxNum-1。 (cin&gt;&gt;) 如果成功读取变量,则为 True,否则为 False。这样,您可以通过输入任何非数字字符串来停止扫描,而不是在其余的迭代中运行循环,但如果发生这种情况,则保持 num[i] 未初始化。
    • 您忘记在数组编号之间输出分隔符,这使得它难以阅读。

      cout &lt;&lt; num[i] &lt;&lt; "|"; 或smth。

    • 1234563其中之一不是必需的。
    • 最后一部分sum[]数组虽然填充正确,但没有输出。您在 l 循环中声明它,这意味着当您退出它时它会被删除。即使你在外面宣布。你的 cout &lt;&lt; sum[l]; 在 l 循环之外,这意味着它只会尝试执行 cout &lt;&lt; sum[maxNum]; (l 的值循环结束),而你只有 [0:(maxNum-1)] 元素num 和 sum 已填满。

    • 我建议你尝试像 for(k=1;k&lt;num[l];k*=10) sum[l]+= num[l] / k % 10; 这样的东西,而不是那个 while 循环。它更短,可以完成工作并保留num[l],以防您以后决定再次使用它。

    【讨论】:

      【解决方案2】:

      您需要先用全零初始化 sum 数组。你不需要嵌套循环。

      创建一个 sum 数组来存储每个数字的总和,并用 0 对其进行初始化。首先编写一个循环来遍历 doubled 数组的元素。为每个元素编写一个循环(您选择 while 循环)来遍历每个数字的数字并将它们遍历到相应的 sum 元素。

      我对你的代码做了一点修改,请看一遍。

      #include <iostream>
      #include <string>
      
      using namespace std;
      
      int maxNum;
      int num[20];
      
      
      int main()
      {
        cout << "Enter an Array" << endl;
        for (int i=0;i<20;i++)
        {
            cin >> num[i];
            maxNum++;
            if (num[i]==-1)
            break;
        }
      
        cout <<"Your array is: " << endl;
      
        for (int i=0;i<maxNum-1;i++)
        cout << num[i]<<' ';
      
        cout << endl;
      
          cout << "Your doubled array is:" << endl;
      
          for (int j=0;j<maxNum-1;j++)
          {
          num[j]*=2;
          cout << num[j]<<' ';
          }
      
          cout << endl;
      
          cout << "When the digits of each seat are added..." << endl;
      
      
          int sum[20];
          for (int i=0;i<maxNum-1;i++)
              sum[i]=0;
          for (int k=0;k<maxNum-1;k++)
          {
             // for (int l=0;l<maxNum;l++)
             // {
      
                 while (num[k]!=0)
                 {
                 sum[k]=sum[k]+num[k]%10;
                 num[k]=num[k]/10;
                 }
                 cout << sum[k]<<' ';
             // }
      
      
      
          }
      
      
      
          cout << endl;
      }
      

      【讨论】:

      • maxNum 是一个全局变量,默认值为0。
      • 这取决于他。通常人们不喜欢使用全局变量。
      【解决方案3】:

      你不需要嵌套循环,而任何程序背后的逻辑都以一个简单的例子得到结果,不要直接跳转到代码。这将帮助您构建逻辑。

      #include <iostream>
      #include <string>
      
      using namespace std;
      
      int maxNum;
      int num[20];
      
      int main()
      {
         int sum=0;  
         cout << "Enter an Array" << endl;
         for (int i=0;i<20;i++)
         {
           cin >> num[i];
           maxNum++;
           if (num[i]==-1)
           break;
         }
         cout <<"Your array is: " << endl;
      
         for (int i=0;i<maxNum;i++)
         cout << num[i]<<ends;
      
        cout << endl;
      
      cout << "Your doubled array is:" << endl;
      
      for (int j=0;j<maxNum;j++)
      {
      num[j]*=2;
      cout << num[j]<<ends;
      }
      
      cout << endl;
      
      cout << "When the digits of each seat are added..." << endl;
      
      int r=0;
      for (int k=0;k<maxNum;k++)
      {
             while (num[k]>0)
             {
              r=num[k]%10;
              sum+=r;
              num[k]=num[k]/10;
             }
             cout<<sum<<ends;
             sum=0;
             r=0;
      }
      cout << endl;
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多