Increment each digit in a number to form a new numberDisplaying each number of an integer in a sequenceUgly...

What is wrong with using bare except?

What is a jet (unit) shown in Windows 10 calculator?

Can you combine War Caster, whip, and Warlock Features to EB enemies with reach?

How would one buy a used TIE Fighter or X-Wing?

Slow moving projectiles from a hand-held weapon - how do they reach the target?

How can animals be objects of ethics without being subjects as well?

What is the wife of a henpecked husband called?

What kind of hardware implements Fourier transform?

Would these multi-classing house rules cause unintended problems?

Why zero tolerance on nudity in space?

Is there any differences between "Gucken" and "Schauen"?

Dilemma of explaining to interviewer that he is the reason for declining second interview

If I sold a PS4 game I owned the disc for, can I reinstall it digitally?

Cryptic with missing capitals

Why doesn't "auto ch = unsigned char{'p'}" compile under C++ 17?

Strange Sign on Lab Door

Can we use the stored gravitational potential energy of a building to produce power?

Why does lambda auto& parameter choose const overload?

Why does String.replaceAll() work differently in Java 8 from Java 9?

Explain the objections to these measures against human trafficking

How to avoid being sexist when trying to employ someone to function in a very sexist environment?

"Free" Hopf algebra

How to deal with an incendiary email that was recalled

It took me a lot of time to make this, pls like. (YouTube Comments #1)



Increment each digit in a number to form a new number


Displaying each number of an integer in a sequenceUgly Numbers: A Rags-to-Riches StoryProject Euler # 22: Names scoresProject Euler 25 - x-digit Fibonacci NumberProject Euler #49 Prime permutationsScrabble Tile CounterHackerrank: Lucky Number Eight (Dynamic Programming)HackerRank week of code 32 competition: GeometrickTrickGoogle Foobar level 3BalancedPassword Codility task













8












$begingroup$


Today I've found /r/dailyprogrammer and I've solved an easy challenge. I'm new to coding and I'm not sure if this is good way to solve this kind of problems. Could you, please, give me some hints? How to make my code more clear and readable? Thanks!




Challange description:



A number is input in computer then a new no should get printed by
adding one to each of its digit. If you encounter a 9, insert a 10
(don't carry over, just shift things around).



For example, 998 becomes 10109.



Bonus



This challenge is trivial to do if you map it to a string to iterate
over the input, operate, and then cast it back. Instead, try doing it
without casting it as a string at any point, keep it numeric (int,
float if you need it) only.




private static int Challange(int number)
{
int digits = (int)Math.Log10(number); //this is number of digits -1
int result = 0;
for (int i=0; i <= digits; i++)
{
int tens = (int)(Math.Pow(10, digits - i));
int currentDigit = ((number / tens) % 10);

if (currentDigit == 9) result *= 10;
result += (currentDigit + 1) * tens;
}
return result;
}









share|improve this question









New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 2




    $begingroup$
    Is 0 a valid input? If so, what should the result be?
    $endgroup$
    – YawarRaza7349
    yesterday


















8












$begingroup$


Today I've found /r/dailyprogrammer and I've solved an easy challenge. I'm new to coding and I'm not sure if this is good way to solve this kind of problems. Could you, please, give me some hints? How to make my code more clear and readable? Thanks!




Challange description:



A number is input in computer then a new no should get printed by
adding one to each of its digit. If you encounter a 9, insert a 10
(don't carry over, just shift things around).



For example, 998 becomes 10109.



Bonus



This challenge is trivial to do if you map it to a string to iterate
over the input, operate, and then cast it back. Instead, try doing it
without casting it as a string at any point, keep it numeric (int,
float if you need it) only.




private static int Challange(int number)
{
int digits = (int)Math.Log10(number); //this is number of digits -1
int result = 0;
for (int i=0; i <= digits; i++)
{
int tens = (int)(Math.Pow(10, digits - i));
int currentDigit = ((number / tens) % 10);

if (currentDigit == 9) result *= 10;
result += (currentDigit + 1) * tens;
}
return result;
}









share|improve this question









New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 2




    $begingroup$
    Is 0 a valid input? If so, what should the result be?
    $endgroup$
    – YawarRaza7349
    yesterday
















8












8








8


1



$begingroup$


Today I've found /r/dailyprogrammer and I've solved an easy challenge. I'm new to coding and I'm not sure if this is good way to solve this kind of problems. Could you, please, give me some hints? How to make my code more clear and readable? Thanks!




Challange description:



A number is input in computer then a new no should get printed by
adding one to each of its digit. If you encounter a 9, insert a 10
(don't carry over, just shift things around).



For example, 998 becomes 10109.



Bonus



This challenge is trivial to do if you map it to a string to iterate
over the input, operate, and then cast it back. Instead, try doing it
without casting it as a string at any point, keep it numeric (int,
float if you need it) only.




private static int Challange(int number)
{
int digits = (int)Math.Log10(number); //this is number of digits -1
int result = 0;
for (int i=0; i <= digits; i++)
{
int tens = (int)(Math.Pow(10, digits - i));
int currentDigit = ((number / tens) % 10);

if (currentDigit == 9) result *= 10;
result += (currentDigit + 1) * tens;
}
return result;
}









share|improve this question









New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




Today I've found /r/dailyprogrammer and I've solved an easy challenge. I'm new to coding and I'm not sure if this is good way to solve this kind of problems. Could you, please, give me some hints? How to make my code more clear and readable? Thanks!




Challange description:



A number is input in computer then a new no should get printed by
adding one to each of its digit. If you encounter a 9, insert a 10
(don't carry over, just shift things around).



For example, 998 becomes 10109.



Bonus



This challenge is trivial to do if you map it to a string to iterate
over the input, operate, and then cast it back. Instead, try doing it
without casting it as a string at any point, keep it numeric (int,
float if you need it) only.




private static int Challange(int number)
{
int digits = (int)Math.Log10(number); //this is number of digits -1
int result = 0;
for (int i=0; i <= digits; i++)
{
int tens = (int)(Math.Pow(10, digits - i));
int currentDigit = ((number / tens) % 10);

if (currentDigit == 9) result *= 10;
result += (currentDigit + 1) * tens;
}
return result;
}






c# programming-challenge






share|improve this question









New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 days ago









t3chb0t

34.7k751121




34.7k751121






New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









nowakasdnowakasd

434




434




New contributor




nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






nowakasd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 2




    $begingroup$
    Is 0 a valid input? If so, what should the result be?
    $endgroup$
    – YawarRaza7349
    yesterday
















  • 2




    $begingroup$
    Is 0 a valid input? If so, what should the result be?
    $endgroup$
    – YawarRaza7349
    yesterday










2




2




$begingroup$
Is 0 a valid input? If so, what should the result be?
$endgroup$
– YawarRaza7349
yesterday






$begingroup$
Is 0 a valid input? If so, what should the result be?
$endgroup$
– YawarRaza7349
yesterday












3 Answers
3






active

oldest

votes


















2












$begingroup$

It's a matter of taste but I find a recursive solution to be reasonably readable :



private static int IncrementDigits(int number){
if (number == 0){
return 0;
}

int lastDigit = number % 10;
int firstDigits = number / 10;

if (lastDigit == 9){
return 10 + 100 * IncrementDigits(firstDigits);
} else {
return lastDigit + 1 + 10 * IncrementDigits(firstDigits);
}
}


Note that it only works for number > 0.



Here's a working example: https://dotnetfiddle.net/xUKs6M






share|improve this answer











$endgroup$









  • 2




    $begingroup$
    You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
    $endgroup$
    – mistertribs
    yesterday










  • $begingroup$
    @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
    $endgroup$
    – Eric Duminil
    yesterday



















8












$begingroup$

It works, but it's a bit tricky to follow the logic and work out why. If you work from the other end then you can avoid the Log and Pow and shifting the partial result, and I find that easier to read.





Challange is not a descriptive name. What does the method do? IncrementDigits might be a better name, for example.






share|improve this answer









$endgroup$





















    3












    $begingroup$

    Computing powers repeatedly and log are not cheap operations.
    You could substitute them with cheaper alternatives:




    • Instead of computing powers of tens, you could start with 1 and multiply in the loop steps.

    • Instead of computing the number of digits and using a counting loop, you could divide by 10 until reaching 0.


    Something like this:



    if (number == 0) {
    return 1;
    }

    int work = number;

    int tens = 1;
    int result = 0;
    while (work > 0) {
    int digit = work % 10;
    work /= 10;

    result += tens * (digit + 1);
    tens *= 10;
    if (digit == 9) {
    tens *= 10;
    }
    }
    return result;





    share|improve this answer









    $endgroup$













      Your Answer





      StackExchange.ifUsing("editor", function () {
      return StackExchange.using("mathjaxEditing", function () {
      StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
      StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
      });
      });
      }, "mathjax-editing");

      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "196"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });






      nowakasd is a new contributor. Be nice, and check out our Code of Conduct.










      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214403%2fincrement-each-digit-in-a-number-to-form-a-new-number%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2












      $begingroup$

      It's a matter of taste but I find a recursive solution to be reasonably readable :



      private static int IncrementDigits(int number){
      if (number == 0){
      return 0;
      }

      int lastDigit = number % 10;
      int firstDigits = number / 10;

      if (lastDigit == 9){
      return 10 + 100 * IncrementDigits(firstDigits);
      } else {
      return lastDigit + 1 + 10 * IncrementDigits(firstDigits);
      }
      }


      Note that it only works for number > 0.



      Here's a working example: https://dotnetfiddle.net/xUKs6M






      share|improve this answer











      $endgroup$









      • 2




        $begingroup$
        You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
        $endgroup$
        – mistertribs
        yesterday










      • $begingroup$
        @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
        $endgroup$
        – Eric Duminil
        yesterday
















      2












      $begingroup$

      It's a matter of taste but I find a recursive solution to be reasonably readable :



      private static int IncrementDigits(int number){
      if (number == 0){
      return 0;
      }

      int lastDigit = number % 10;
      int firstDigits = number / 10;

      if (lastDigit == 9){
      return 10 + 100 * IncrementDigits(firstDigits);
      } else {
      return lastDigit + 1 + 10 * IncrementDigits(firstDigits);
      }
      }


      Note that it only works for number > 0.



      Here's a working example: https://dotnetfiddle.net/xUKs6M






      share|improve this answer











      $endgroup$









      • 2




        $begingroup$
        You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
        $endgroup$
        – mistertribs
        yesterday










      • $begingroup$
        @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
        $endgroup$
        – Eric Duminil
        yesterday














      2












      2








      2





      $begingroup$

      It's a matter of taste but I find a recursive solution to be reasonably readable :



      private static int IncrementDigits(int number){
      if (number == 0){
      return 0;
      }

      int lastDigit = number % 10;
      int firstDigits = number / 10;

      if (lastDigit == 9){
      return 10 + 100 * IncrementDigits(firstDigits);
      } else {
      return lastDigit + 1 + 10 * IncrementDigits(firstDigits);
      }
      }


      Note that it only works for number > 0.



      Here's a working example: https://dotnetfiddle.net/xUKs6M






      share|improve this answer











      $endgroup$



      It's a matter of taste but I find a recursive solution to be reasonably readable :



      private static int IncrementDigits(int number){
      if (number == 0){
      return 0;
      }

      int lastDigit = number % 10;
      int firstDigits = number / 10;

      if (lastDigit == 9){
      return 10 + 100 * IncrementDigits(firstDigits);
      } else {
      return lastDigit + 1 + 10 * IncrementDigits(firstDigits);
      }
      }


      Note that it only works for number > 0.



      Here's a working example: https://dotnetfiddle.net/xUKs6M







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited yesterday

























      answered yesterday









      Eric DuminilEric Duminil

      2,0611613




      2,0611613








      • 2




        $begingroup$
        You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
        $endgroup$
        – mistertribs
        yesterday










      • $begingroup$
        @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
        $endgroup$
        – Eric Duminil
        yesterday














      • 2




        $begingroup$
        You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
        $endgroup$
        – mistertribs
        yesterday










      • $begingroup$
        @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
        $endgroup$
        – Eric Duminil
        yesterday








      2




      2




      $begingroup$
      You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
      $endgroup$
      – mistertribs
      yesterday




      $begingroup$
      You could use System.Math.DivRem to do the division and modulo operations (on .Net Core this would be faster, the .Net Framework implementation does the naïve thing of doing the division twice)
      $endgroup$
      – mistertribs
      yesterday












      $begingroup$
      @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
      $endgroup$
      – Eric Duminil
      yesterday




      $begingroup$
      @mistertribs: Thanks. I wanted to stay close enough to OP's answer. I don't really like the output argument in Math.DivRem, to be honest.
      $endgroup$
      – Eric Duminil
      yesterday













      8












      $begingroup$

      It works, but it's a bit tricky to follow the logic and work out why. If you work from the other end then you can avoid the Log and Pow and shifting the partial result, and I find that easier to read.





      Challange is not a descriptive name. What does the method do? IncrementDigits might be a better name, for example.






      share|improve this answer









      $endgroup$


















        8












        $begingroup$

        It works, but it's a bit tricky to follow the logic and work out why. If you work from the other end then you can avoid the Log and Pow and shifting the partial result, and I find that easier to read.





        Challange is not a descriptive name. What does the method do? IncrementDigits might be a better name, for example.






        share|improve this answer









        $endgroup$
















          8












          8








          8





          $begingroup$

          It works, but it's a bit tricky to follow the logic and work out why. If you work from the other end then you can avoid the Log and Pow and shifting the partial result, and I find that easier to read.





          Challange is not a descriptive name. What does the method do? IncrementDigits might be a better name, for example.






          share|improve this answer









          $endgroup$



          It works, but it's a bit tricky to follow the logic and work out why. If you work from the other end then you can avoid the Log and Pow and shifting the partial result, and I find that easier to read.





          Challange is not a descriptive name. What does the method do? IncrementDigits might be a better name, for example.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 2 days ago









          Peter TaylorPeter Taylor

          17.4k2862




          17.4k2862























              3












              $begingroup$

              Computing powers repeatedly and log are not cheap operations.
              You could substitute them with cheaper alternatives:




              • Instead of computing powers of tens, you could start with 1 and multiply in the loop steps.

              • Instead of computing the number of digits and using a counting loop, you could divide by 10 until reaching 0.


              Something like this:



              if (number == 0) {
              return 1;
              }

              int work = number;

              int tens = 1;
              int result = 0;
              while (work > 0) {
              int digit = work % 10;
              work /= 10;

              result += tens * (digit + 1);
              tens *= 10;
              if (digit == 9) {
              tens *= 10;
              }
              }
              return result;





              share|improve this answer









              $endgroup$


















                3












                $begingroup$

                Computing powers repeatedly and log are not cheap operations.
                You could substitute them with cheaper alternatives:




                • Instead of computing powers of tens, you could start with 1 and multiply in the loop steps.

                • Instead of computing the number of digits and using a counting loop, you could divide by 10 until reaching 0.


                Something like this:



                if (number == 0) {
                return 1;
                }

                int work = number;

                int tens = 1;
                int result = 0;
                while (work > 0) {
                int digit = work % 10;
                work /= 10;

                result += tens * (digit + 1);
                tens *= 10;
                if (digit == 9) {
                tens *= 10;
                }
                }
                return result;





                share|improve this answer









                $endgroup$
















                  3












                  3








                  3





                  $begingroup$

                  Computing powers repeatedly and log are not cheap operations.
                  You could substitute them with cheaper alternatives:




                  • Instead of computing powers of tens, you could start with 1 and multiply in the loop steps.

                  • Instead of computing the number of digits and using a counting loop, you could divide by 10 until reaching 0.


                  Something like this:



                  if (number == 0) {
                  return 1;
                  }

                  int work = number;

                  int tens = 1;
                  int result = 0;
                  while (work > 0) {
                  int digit = work % 10;
                  work /= 10;

                  result += tens * (digit + 1);
                  tens *= 10;
                  if (digit == 9) {
                  tens *= 10;
                  }
                  }
                  return result;





                  share|improve this answer









                  $endgroup$



                  Computing powers repeatedly and log are not cheap operations.
                  You could substitute them with cheaper alternatives:




                  • Instead of computing powers of tens, you could start with 1 and multiply in the loop steps.

                  • Instead of computing the number of digits and using a counting loop, you could divide by 10 until reaching 0.


                  Something like this:



                  if (number == 0) {
                  return 1;
                  }

                  int work = number;

                  int tens = 1;
                  int result = 0;
                  while (work > 0) {
                  int digit = work % 10;
                  work /= 10;

                  result += tens * (digit + 1);
                  tens *= 10;
                  if (digit == 9) {
                  tens *= 10;
                  }
                  }
                  return result;






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered yesterday









                  janosjanos

                  98.1k12125350




                  98.1k12125350






















                      nowakasd is a new contributor. Be nice, and check out our Code of Conduct.










                      draft saved

                      draft discarded


















                      nowakasd is a new contributor. Be nice, and check out our Code of Conduct.













                      nowakasd is a new contributor. Be nice, and check out our Code of Conduct.












                      nowakasd is a new contributor. Be nice, and check out our Code of Conduct.
















                      Thanks for contributing an answer to Code Review Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      Use MathJax to format equations. MathJax reference.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214403%2fincrement-each-digit-in-a-number-to-form-a-new-number%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

                      How do i solve the “ No module named 'mlxtend' ” issue on Jupyter?

                      Pilgersdorf Inhaltsverzeichnis Geografie | Geschichte | Bevölkerungsentwicklung | Politik | Kultur...