簡體   English   中英

將數字的每個數字加一的程序

[英]program to add one to each digit of a number

作為競爭性編程的新手,我正在解決這個練習題。 目標是編寫一個程序來顯示其數字比輸入數字的相應數字大 1 的數字。 因此,如果輸入的數字是 12345,那么 output 數字應該是 23456。我已經想出了如何將每個數字分開並添加它們,但是我無法在以下程序中進行一些測試用例。

問題如下

輸入

第一行輸入將包含一個數字 N = 測試用例數。 接下來的 N 行將包含數字 n 作為測試用例,其中 1<=n<=99999。

Output

對於每個輸入案例,將 n 的每個數字加一,並打印新數字。

作為競爭性編程的初學者,如果您提供一些優化代碼的提示,將會很有幫助。

這是我寫的代碼。

#include<stdio.h>
void main()
{
    int n, t, sum = 0;
    scanf("%d", &t);
    int a[t];
    for (int j = 0; j < t; j++)
    {
        for (int i = 0; i < t; i++)
        {
            scanf("%d", &n);
            a[i] = n;

            if (t == 1) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
            else if (t == 2) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 10;
                }
                else if (i == 1) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
            else if (t == 3) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 100;
                }
                else if (i == 1) {
                    a[i] = (a[i] + 1) * 10;
                }
                else if (i == 2) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
            else if (t == 4) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 1000;
                }
                else if (i == 1) {
                    a[i] = (a[i] + 1) * 100;
                }
                else if (i == 2) {
                    a[i] = (a[i] + 1) * 10;
                }
                else if (i == 3) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
            else if (t == 5) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 10000;
                }
                else if (i == 1) {
                    a[i] = (a[i] + 1) * 1000;
                }
                else if (i == 2) {
                    a[i] = (a[i] + 1) * 100;
                }
                else if (i == 3) {
                    a[i] = (a[i] + 1) * 10;
                }
                else if (i == 4) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
            else if (t == 6) {
                if (i == 0) {
                    a[i] = (a[i] + 1) * 100000;
                }
                else if (i == 1) {
                    a[i] = (a[i] + 1) * 10000;
                }
                else if (i == 2) {
                    a[i] = (a[i] + 1) * 1000;
                }
                else if (i == 3) {
                    a[i] = (a[i] + 1) * 100;
                }
                else if (i == 4) {
                    a[i] = (a[i] + 1) * 10;
                }
                else if (i == 4) {
                    a[i] = (a[i] + 1) * 1;
                }
            }
        }
    }
    for (int i = 0; i < t; i++)
    {
        sum = sum + a[i];
    }
    printf("%d\n", sum);
}

我從一開始就重新編寫了代碼,並為您制定了解決方案:

#include <stdio.h>

int main(void)
{
    int num, sum, remainder, check; // check used as a boolean expression
    sum = check = 0;

    printf("Enter the sequence: ");
    scanf("%d", &num);

    while (num > 0)
    {
        remainder = num % 10; // each time num is reduced

        if (remainder != 9)
        {
            if (check == 0)
                sum = (10 * sum) + (remainder + 1);
            else
            {
                sum = (10 * sum) + (remainder + 2);
                check = 0;
            }
        }
        else
        {
            sum = (10 * sum) + 0;
            check = 1;
        }
        num /= 10; // will divide and execute in each iteration until it's true
    }

    num = sum; // final number will be equal to the sum
    sum = 0;

    // Summing up the results
    while (num > 0)
    {
        remainder = num % 10;
        sum = (10 * sum) + remainder;
        num /= 10;
    }

    printf("Result: %d\n", sum);

    return 0;
}

測試 Output

Enter the sequence: 23456
Result: 34567

這只是關於總和和余數。 希望它可以幫助您更好地理解。

import java.util.Scanner;

class Main
{
  public static void main(String[] args)
  {
    int num,i=1,j;
    Scanner scan=new Scanner(System.in);
    int numo=scan.nextInt();num=numo;
    for(;numo>0;numo=numo/10,i=i*10)
    {
      num=num+i;
      if(numo%10==9)  
      num=num-i*10;  
    } 
  System.out.println(num);
  }
}

希望以下解決方案對您有所幫助。 它是使用基本余數和反向方法完成的:-

int addOne(int n)
{
    int rem, ans=0, p=1 ;
    while(n>0)
    {
        rem = n%10;
        (rem == 9)?rem = 0:rem+=1;
        ans+=p*rem;
        p*=10;n/=10;
    }
    return ans;
}

int main() {
   
   int n;
   cin>>n;
   cout<<addOne(n);
   return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM