先列一个加法竖式:
1 | ||||||||||
1 | 1 | |||||||||
1 | 1 | 1 | ||||||||
1 | 1 | 1 | 1 | |||||||
. | ||||||||||
. | ||||||||||
1 | . | . | . | 1 | 1 | 1 | 1 | 1 | (1023个1) | |
1 | 1 | . | . | . | 1 | 1 | 1 | 1 | 1 | (1024个1) |
-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | ------------- |
1 | 0 | 2 | 4 | |||||||
1 | 0 | 2 | 3 | |||||||
. | . | |||||||||
2 | ||||||||||
1 |
还有一个需要确定的问题是sum位数是否会超过1024位,答案是不会,有兴趣的请自行证明。
#include <iostream>
using namespace std;
int countSumOne(int oneCount)
{
if(oneCount <= 0)
{
return 0;
}
int count = 0;
int sum = 0;
int maxOneCount = oneCount;
while(maxOneCount)
{
sum += maxOneCount;
if(sum % 10 == 1)
{
++count;
}
sum /= 10;
--maxOneCount;
}
return count;
}
int main(int argc, char* argv[])
{
cout << countSumOne(-1024) << endl;
cout << countSumOne(1024) << endl;
return 0;
}