编程求助:求两道题目的JAVA代码

程序设计:1.求水仙花数。如果一个三位数的百位、十位和个位数的立方和等于这个数,则称该数为水仙花数。2.计算个人所得税。所得税的计算方法是:工资在1000元以内不用纳税:... 程序设计:
1.求水仙花数。如果一个三位数的百位、十位和个位数的立方和等于这个数,则称该数为水仙花数。
2.
计算个人所得税。所得税的计算方法是:工资在1000元以内不用纳税:工资超过1000元时应按超出的金额纳税,计算方法如下。
超出金额小于500,税率为5%;
超出金额大于500,小于等于2000,税率为10%
超出金额大于2000,小于等于5000,税率为15%
超出金额大于5000,小于等于20000,税率为20%
超出金额大于20000,小于等于40000,税率为25%

我的本意是希望得到正确而详细JSP代码,但是如果不晓得写JSP代码的朋友就直接给出详细的JAVA代码也行.谢谢了!
关键是第二题."按超出的金额纳税".我觉得三楼的朋友你的计算方法好像有点问题呢?那样也是按照 超出 的金额纳税呀?
希望后面的朋友能否写出JSP页面代码.谢谢!
展开
 我来答
plause
2007-10-16 · TA获得超过906个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:0
展开全部
可能你会觉得我在把问题变得复杂化,但是请看下去:
(请将代码中的````换成一个tab符)

首先我们定义一个异常类: UnExpectedNumberException
表示所接收到的数字是我们不想要的,类如,我们只对正数进行平方根处理,
但是传入的是一个负数,于是我们可以抛出这个异常

// UnExpectedNumberException.java
//package cn.plause.test.narcissus;

public final class UnExpectedNumberException extends Exception {
````private static final long serialVersionUID = 3080196113722623423L;
````private static final String MESSAGE_FMT = "Number should bigger than %s and smaller than %s";

````public UnExpectedNumberException(int min, int max) {
````````super(String.format(MESSAGE_FMT, min, max));
````}
}

接下来,我们再定义一个接口:NumberAcceptor (你可以理解为数字接受器)
该接口只有一个方法:
public boolean accept(Integer number) /* throws UnExpectedNumberException */;
该方法接受一个参数Integer number,如果实现该接口的类认为
这个number是他需要的或者相信的或者什么其他的东西的话就会返回true,否则false.

// NumberAcceptor.java
//package cn.plause.test.narcissus;

public interface NumberAcceptor {
````public boolean accept(Integer number) /* throws UnExpectedNumberException */;
}

这个接口具有通用性,今天你可能使用它判断一个数是否是水仙花数,明天说不定会用它
来判断一个数是不是镜像数(3443就是一个镜像数)或者什么其它的数字。

下面我们回到重点,因为前面跟水仙花数的逻辑判断一点也没有搭上边。
我们知道,按照一般的逻辑就是这样
for (i = 100; i < 1000; i++) {
````如果 i 是一个水仙花数则打印 i
}

而按照一般的判断一个水仙花数的逻辑就是这样的
i / 100 得到百位,
i % 100 / 10 得到十位,
i % 10 得到个位。
然后把这百、十、个位分别立方相加得到一个和,
再将这个和同 i 相比较,如果相等则是水仙花,否则不是。

其实我们还有另一种逻辑的:
一个数 153,如果把它看成是一个字符串的话就是 "153",
字符串的第一个字符是 '1',第二个是 '5',第三个是 '3'。
为什么不直接 1 * 3 + 5 * 3 + 3 * 3 呢?
可能你会说 '1' != 1,
那么 '1' - '0' 呢?!
'1' 的ASC码是 31,'0'的ASC码是30,
显示有 '1' - '0' = 1, '8' - '0' = 8
所以我们可以直接 ('1' - '0') * 3 + ('5' - '0') * 3 + ('3' - '0') * 3

注意,本人并不是想说明别人的算法是不正确的,只是想说清楚我的算法。
请看最重要的类:
(怕大家调试不方便,所以把异常去掉了)

// NarcissusNumber.java
//package cn.plause.test.narcissus;

public final class NarcissusNumber {
````/**
```` * 计算一个数字的每一位的立方和。
```` * 这个方法不只是能算出 3 位数的水仙花数。
```` */
````public static int pow(Integer number) {
````````String digits = number.toString();
````````int total = 0;

````````/*
```````` * 字符 '9' - '0' = 9, '8' - '0' = 8
```````` * 以此类推……
```````` */
````````for (int i = 0; i < digits.length(); i++) {
````````````total += (int) Math.pow(digits.charAt(i) - '0', 3);
````````}

````````return total;
````}

````public static void main(String[] args) {
````````/* 新建一个数字接受器对象 */
````````NumberAcceptor narcissusNA = new NumberAcceptor() {
````````````/* 实现NumberAcceptor接口中的accept方法 */
````````````public boolean accept(Integer number) /* throws UnExpectedNumberException */ {
````````````````// 三位数的水仙花数肯定是大于100小于1000的数
````````````````if (! (number > 100 && number < 1000)) {
````````````````````/* throw new UnExpectedNumberException(100, 1000); */
````````````````}

````````````````// 如果这个整数的每一位的立方和与其本身相等,则其是水仙花数
````````````````return pow(number) == number;
````````````}
````````};

````````// 你可以把这个循环的初始条件与结束条件更改以使本程序算出多位水仙花数
````````for (int i = 101; i < 1000; i++) {
````````````// 如果是水仙花数,则打印这个整数
````````````if (narcissusNA.accept(i)) {
````````````````System.out.println(i);
````````````}
````````}
````}
}

希望不要嫌麻烦。

第二个: 个人所得税,这个没有什么扩展性,所以简单写了

public final class TaxUtils {
````public static double calculatePersonalTax(int wage) {
````````if (wage <= 1000) { // 没有超过 1000 不用给钱
````````````return 0d;
````````}

````````int diff = wage - 1000;

````````// 不知道超过40000的怎么算
````````if (diff > 40000) {
````````````return -1d;
````````}

````````if (diff > 20000) { // 超出 20000
````````````return diff * 0.25d;
````````} else if (diff > 5000) { // 超出 5000
````````````return diff * 0.20d;
````````} else if (diff > 2000) { // 超出 2000
````````````return diff * 0.15d;
````````} else if (diff > 500) { // 超出 500
````````````return diff * 0.10d;
````````} else { // 超出小于 500
````````````return diff * 0.05d;
````````}
````}

````public static void main(String[] args) {
````````System.out.println(calculatePersonalTax(30000));
````}
}
henterji
2007-10-16 · TA获得超过2973个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:1851万
展开全部
1.
public class Narcissus {
public static void main(String[] args) {
printNarcissus();
}

private static void printNarcissus() {
for (int i = 100; i < 1000; i++) {
int a = i / 100;
int b = (i - a * 100) / 10;
int c = i - a * 100 - b * 10;
if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == i) {
print(a, b, c);
}
}
}

private static void print(int a, int b, int c) {
System.out.println("" + a + b + c + "=" + a + "^3+" + b + "^3+" + c
+ "^3");
}
}

153=1^3+5^3+3^3
370=3^3+7^3+0^3
371=3^3+7^3+1^3
407=4^3+0^3+7^3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hu437
2007-10-16 · TA获得超过3472个赞
知道大有可为答主
回答量:2690
采纳率:0%
帮助的人:2281万
展开全部
1.
public class Test {
public static void main(String [] args){
int bai,shi,ge;
for(int i=100;i<1000;i++)
{
bai=i/100;
shi=(i%100)/10;
ge=i%10;
if(i==Math.pow(bai,3)+Math.pow(shi,3)+Math.pow(ge, 3))
System.out.println("您要求的水仙花数为:");
System.out.println(i);
}
}
}
2.这个我是用的从键盘接受所输入的数字来判断的,你可以根据自己的情况修改
import java.util.*;

public class Test {
public static void main(String [] args){

Scanner in=new Scanner(System.in);
System.out.println("你输入你要求的所得税的工资:");
double pay=in.nextDouble();
if(pay<1000){
System.out.println("不用交纳个人所得税!");
}
else{
if(pay>1000 && pay<=1500)
System.out.println("您应该交纳的所得税为:"+pay*0.05);
if(pay>1500 && pay<=3000)
System.out.println("您应该交纳的所得税为:"+pay*0.1);
if(pay>3000 && pay<=6000)
System.out.println("您应该交纳的所得税为:"+pay*0.15);
if(pay>6000 && pay<=21000)
System.out.println("您应该交纳的所得税为:"+pay*0.2);
if(pay>21000 && pay<=41000)
System.out.println("您应该交纳的所得税为:"+pay*0.25);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
458218493
2007-10-27
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
///编程求出所有的 “水仙花数”:2006-10-10 08:43///
把下面代码复制到代码区,点击窗体触发事件

Private Sub Form_Click()
Dim a, b, c As Integer 'a(个)b(十)c(百)
For a = 0 To 9
For b = 0 To 9
For c = 1 To 9
If a ^ 3 + b ^ 3 + c ^ 3 = a + 10 * b + 100 * c Then
MsgBox 100 * c + 10 * b + a
End If
Next c
Next b
Next a
End Sub

烟花飘飘的空间,里面还有几个例子,你可以看

参考资料: ///编程求出所有的 “水仙花数”:2006-10-10 08:43///

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式