2016-09-15 135 views
0

在我的AP计算机科学课上,我们正在进行算法分配。我们只能使用数据类型boolean,doubleint。我们不能使用任何Java类来处理数据类型或数学库(换句话说,我们必须从头开始构建所有东西)。我已经有了确定给定整数的位数(length(int))和计算功率(power(double base, int exponent))的工作方法。我相信这些将是我坚持使用的一种算法所必需的。这些算法描述如下:如何将数字的数字放入整数数组中?

写方法findDigit(INT NUM,INT N),返回从一个给定整数 其中n是一个正整数的右边的第n个数字。例如, findDigit(30568,2)将返回6, findDigit(234.5)将返回0, findDigit(-4532,3)将返回5

我打算使用的字符串类直到我意识到我不被允许。这只能使用数学运算来完成。如果你们中的一个人可以给我关于如何制作一个包含整数数字的数组的逻辑,那么我很乐意从那里开始。我宁愿使用逻辑代码(所以我可以练习编写代码),但是使用C++或java编写的代码也不错。

我有一些代码,我认为会工作,但最终没有工作。如果需要的话,我可以提供。

在此先感谢!

+5

提示:你可以用整数除法和mod运算符来做到这一点。 – hatchet

+0

而你正在查找数字的数字是10 ...... –

+1

FlareCat,你为什么接受一个返回错误结果的答案? – Andreas

回答

-2

下面是一些伪代码:

int findDigit(int num, int n) { 

    for (i = 0; i < n-1; i++) { 
    num = num/10; 
    } 

    return num % 10; 
} 
+0

如果'10 ^(n-1)> num',你可以检查一个初始条件,这样对于大'n'值,你不会循环所有迭代(立即返回0)。只是为了表演。如果你总是控制'n'的值,不要检查它。 –

+3

我不认为Stack Overflow应该是一个“为我做作业”的网站。这不是伪代码 - 这是Java,只有一个容易修正的编译错误。你没有帮助OP为他们做任务。 –

+2

供其他人阅读本答案。它不会为所有输入返回正确的结果。问题列出了3个样本输入,并且这个答案在33%中失败。 – Andreas

-2

我向您展示的过程。这里是代码(使用c#和.net框架库)

private int findDigit(int num, int n) 
    { 
     string result = string.Empty; 

     int unsigned = Math.Abs(num); //To get th absolute value of num 
     string str = unsigned.ToString();//Convert the (absolute value) to string 
     int index = str.Length - n;  //Index of the desired digit 

     try 
     { 
      result = str.Substring(index, 1);  
     } 
     catch 
     { 
      result = "0"; 
     } 

     int digit = Convert.ToInt32(result); //To Convert the result into int 

     return digit; 
    } 
+1

OP已经说过'ToString()'是不允许的:*“我打算使用字符串类,直到我意识到我不被允许。”* – Andreas

+0

没有ToString()方法,它不可能获得int的长度或c#中数字的索引。所以我无法帮助你。 – Pavel

+2

@Pavel我觉得这很难相信。我不是C#程序员,但我怀疑你会发现它支持分割和模数运算。 –