posts - 183,  comments - 10,  trackbacks - 0
除以 1000 , 对余数进行处理
 1 #include <iostream>
 2 using namespace std;
 3 
 4 char* reverse(char* s, int low, int high)
 5 {
 6     while (low < high)
 7     {
 8         s[low] ^= s[high];
 9         s[high] ^= s[low];
10         s[low] ^= s[high];
11         ++low;
12         --high;
13     }
14     return s;
15 }
16 
17 char* format_thousands_separator(char a[], unsigned long val)
18 {
19     char* ret = a;
20     char temp[4];
21     int t;
22     int n = 0;
23     while (val > 1000)
24     {
25         t = val % 1000;
26         if (t >= 100)
27         {
28             itoa(t, temp, 10);
29             reverse(temp, 02);
30             //cout << temp << endl;
31             strcat(ret, temp);
32             //cout<< "test" << ret << endl;
33         }
34         else if (t >= 10)
35         {
36             itoa(t, temp, 10);
37             reverse(temp, 01);
38             strcat(ret, temp);
39             strcat(ret, "0");
40         }
41         else
42         {
43             itoa(t, temp, 10);
44             strcat(ret, temp);
45             strcat(ret, "00");
46         }
47         strcat(ret, ",");
48         n += 4;
49         val /= 1000;
50         ret[n] = '\0';
51         cout << ret << endl;
52     }
53     if (val >= 100)
54     {
55         itoa(val, temp, 10);
56         reverse(temp, 02);
57         strcat(ret, temp);
58         n += 3;
59     }
60     else if (val >= 10)
61     {
62         itoa(val, temp, 10);
63         reverse(temp, 01);
64         strcat(ret, temp);
65         n += 2;
66     }
67     else
68     {
69         itoa(val, temp, 10);
70         strcat(ret, temp);
71         ++n;
72     }
73     reverse(ret, 0, n - 1);
74     ret[n] = '\0';
75     return ret;
76 };
77 
78 int main()
79 {
80     unsigned long ul;
81     char sul[20= {0};
82     while (cin >> ul)
83     {
84         cout << format_thousands_separator(sul, ul) << endl;
85     }
86     return 0;
87 }

先转换成一个 字符串 ,然后从右扫描,加逗号,然后反转
 1 #include <iostream>
 2 #include <sstream>
 3 #include <string>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const string& format_thousands_separator(string& s, unsigned long val)
 8 {
 9     s.clear();
10     char t[20];
11     string temp(ltoa(val, t, 10));
12 
13     int n = 0;
14     for (string::const_reverse_iterator cit = temp.rbegin(); cit != temp.rend(); ++cit)
15     {
16         ++n;
17         s += *cit;
18         if (n == 3)
19         {
20             s += ',';
21             n = 0;
22         }
23     }
24     reverse(s.begin(), s.end());
25     return s;
26 }
27 
28 int main()
29 {
30     unsigned long ul;
31     string sul;
32     while (cin >> ul)
33     {
34         cout << format_thousands_separator(sul, ul) << endl;
35     }
36     return 0;
37 }

http://www.cppblog.com/qinqing1984/archive/2011/06/24/149366.html





posted on 2011-06-24 16:46 unixfy 阅读(468) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理