给定一个非负整数num,请重复加所有数字,直到结果只有一位

时间:2019-03-20 03:56:28

标签: python-3.x

我不明白为什么这段代码会给我“错误”而不是2。我正在尝试不递归地这样做。递归的示例也将不胜感激。

def addDigits(num):
   num = str(num)
   if(len(num) > 1):
   for i in range(0, len(num)-1):
        for j in range(1, len(num)):
            if(len(str(int(num[i]) + int(num[j]))) > 1):
                x = len(str(int(num[i]) + int(num[j])))
                for i2 in range(0, x-1):
                    for j2 in range(1, x):
                        if(x == 1):
                            return(int(num[i]) + int(num[j]))
                        else: 
                            return('Error')
            else:
                return('Error2')
    else:
        return(num)
print(addDigits(38))    

3 个答案:

答案 0 :(得分:0)

我认为,如果您输出x,则会发现x=2而不是x=1,因此程序将运行else: return('Error')

答案 1 :(得分:0)

就像您提到的那样,递归是最好的方法。如果您编写的代码具有两个以上的循环,请再考虑一下是否绝对必要。

package com.example.jabed.algorithmsimulator;

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class BubbleSortActivity extends AppCompatActivity {
        private Button button;
        private TextView t2;
        private EditText e1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bubble_sort);


>   **taken input from Activity2.xml though editText**

            Intent  intent = getIntent(); 
            String bubble = intent.getStringExtra("Extra_message");
            t2 =(TextView)findViewById(R.id.textView2);


>  **putting it an array by sparating with space in the input section**

            String [] intString=bubble.split(" ");


**in bellow section is my sorting code just**

            int bubbleArr[]=new int[intString.length];
            for(int i=0;i<bubbleArr.length;i++) {
                bubbleArr[i]=Integer.parseInt(intString[i]);
            }
            int n = bubbleArr.length;enter link description here
            t2.setText("  Passes in ascending order" + "\n");
            for (int i = 0; i < n-1; i++) {
                boolean swap=false;
                for (int j = 0; j < n-i-1; j++) {
                    if (bubbleArr[j] > bubbleArr[j+1])
                    {

                        int temp = bubbleArr[j];
                        bubbleArr[j] = bubbleArr[j+1];
                        bubbleArr[j+1] = temp;
                        swap=true;
                    }

                }
                if(swap==false)
                    break;



> **here i want to show all the passing**


                String []strArr=new String[bubbleArr.length];
                t2.setText("  Pass "+(i+1)+": ");
                for (int k=0; k<n; k++) {
                    strArr[k]=String.valueOf(bubbleArr[k]);
                    t2.setText(strArr[k]+" ");
                }
               t2.setText("\n");

            }

        }
            public void onclickButton(View V){
                Intent intent = new Intent(this,Activity2.class);
                startActivity(intent);

            }
    }

输出:

def add_digits(x):
    if x/10>1:
        x=add_digits(sum([int(i) for i in str(x)]))
    else:
        return x
    if x/10<1:
        return x
add_digits(123456)

上面的代码将帮助您对数字求和,直到其为单个数字为止。

与C或C ++不同,python不是一种超快速的语言。避免循环会产生重大变化。

答案 2 :(得分:0)

这是使用循环的一种方法,我来自Java,所以请忍受分号。

def addDigits(num):

        while(num >= 10):
            int temp = 0;
            while(num > 0):
                temp = temp + num % 10;
                num = num/10;
            
            num = temp;
        
        return num;
addDigits(38)

这应该给您正确的答案,即2