标签:
问题如下:给定一个正整数n,统计从1到n的所有整数中出现“1”的个数,如当n=12时,1,2,3,4,5,6,7,8,9,10,11,12中,共有5个“1”;
下面给出我的暴力求解方法:
1 package org.warnier.zhang.demo; 2 3 public class OneCalculator { 4 5 public int calculate(int n) { 6 int count = 0; 7 for(int i = 1; i <= n; i++){ 8 int z = i; 9 while(z != 0){ 10 if(z % 10 == 1){ 11 count++; 12 } 13 z /= 10; 14 } 15 } 16 return count; 17 } 18 19 }
测试代码如下:
1 package org.warnier.zhang.demo.test; 2 3 import static org.junit.Assert.*; 4 import org.junit.Before; 5 import org.junit.Test; 6 import org.warnier.zhang.demo.OneCalculator; 7 8 public class OneCalculatorTest { 9 10 @Before 11 public void setUp() throws Exception { 12 } 13 14 @Test 15 public void test_n_equals_1_return_1(){ 16 OneCalculator calculator = new OneCalculator(); 17 int actual = calculator.calculate(1); 18 int expected = 1; 19 assertEquals(expected, actual); 20 } 21 22 @Test 23 public void test_n_equals_10_return_2(){ 24 OneCalculator calculator = new OneCalculator(); 25 int actual = calculator.calculate(10); 26 int expected = 2; 27 assertEquals(expected, actual); 28 } 29 30 @Test 31 public void test_n_equals_11_return_4(){ 32 OneCalculator calculator = new OneCalculator(); 33 int actual = calculator.calculate(11); 34 int expected = 4; 35 assertEquals(expected, actual); 36 } 37 38 @Test 39 public void test_n_equals_12_return_5(){ 40 OneCalculator calculator = new OneCalculator(); 41 int actual = calculator.calculate(12); 42 int expected = 5; 43 assertEquals(expected, actual); 44 } 45 46 }
没多加思考,好像还有更好的解决方式,知道的读者可以贴上代码,交流一下!
标签:
原文地址:http://www.cnblogs.com/warnier-zhang/p/4463924.html