码迷,mamicode.com
首页 > 其他好文 > 详细

【S1】1016.高精度除法

时间:2015-05-03 13:14:21      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

之所以写这一题是因为,同学普遍表示我的代码略短,而且我第二次看自己代码时也被自己震惊了= =||

核心思想并无不同

关键在于for循环与while的嵌套节省了大量的判断长度。

代码简洁的最主要因素是算法,逻辑复杂可能会增长代码长度。

此处我的逻辑是:

第一次比较时,若小于,直接break。

从第二次开始,用所选长度数字,用相同位数的数字做减法。

若所选的数字的前一位等于零,且不能再做减法,向下移位。

用tempint统计每一位的值,放入最终结果

(。??)ノ

 

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main(int argc, char *argv[]){
 6     string a, b, substring;
 7     int i, j, k;
 8     int tempint;
 9     int number = 0;
10     int size_a = 0, size_b = 0; 
11     int result[300] = {0};
12     cin>>a>>b;
13     
14     size_a = a.size();
15     size_b = b.size();
16   // 第一位开始,从高位到低位计算结果
17     for(i = 0; i <= size_a - size_b; ++i){
18         substring = a.substr(i, i + size_b);
19         // 统计每一位的值,number<=9
20         number = 0;
21         while(true){
22             if(i == 0 && substring < b) break; // 第一次的特殊情况
23             if(i != 0 && substring < b && a[i-1] == 0) break; // 第二次循环及以后的停止条件
24             for(j = i + size_b - 1, k = size_b - 1; j >= i; --j, --k){
25                 tempint = a[j] - b[k];
26                 if(tempint < 0) {
27                     a[j - 1] -= 1;
28                     tempint += 10;
29                 }
30                 a[j] = tempint + 0;
31             }   // 上方for循环用于计算每一位
32             ++number;
33             substring = a.substr(i, i + size_b); // 刷新
34         }
35         result[i] = number;
36     }
37     if(result[0]!=0){
38         cout << result[0];
39     }
40     for(i = 1; i <= size_a - size_b; ++i){
41         // 输出
42         cout << result[i];
43     }
44     return 0;
45 }

 

【S1】1016.高精度除法

标签:

原文地址:http://www.cnblogs.com/xtlu/p/4473534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!