乘积的末三位
来源:互联网 发布:外国域名注册网站 编辑:程序博客网 时间:2024/04/29 02:32
题目名称:乘积的末3位(product)
* 题目描述:
* 输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末3位。
* 这些整数中会混入一些由大写字母组成的字符串,你的程序中应当忽略它们。
* 样例输入:+1 +2 + -1 -2 k 12 english 54 9876 -111
* 题目描述:
* 输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末3位。
* 这些整数中会混入一些由大写字母组成的字符串,你的程序中应当忽略它们。
* 样例输入:+1 +2 + -1 -2 k 12 english 54 9876 -111
* 样例输出:712
- /**
- * 题目分析:
- * 题目难度主要在于参差的数据类型输入。
- * 题目总思路,使用while语句逐个string作为单词输入。
- * 然后通过调用函数bool getInt(...)判断该单词是否整数,另外,再利用该函数的形参将正确的整数返回。
- * 将从函数里面得出的整数与结果相乘,乘后保留末三位整数即可。
- * 其中,关于如何实现bool getInt(string get, int & nowGet)才是难题。实现方法如下:
- * 首先,考虑不是整数的情况,1.字符串为空,返回false, 2.是字母或是仅有一个符号。
- * 除了字符串为空的情况外,我们可以开始考虑字符串不为空的情况,字符串不为空时,存在三种情况,
- * 第一种,带符号的整数,第二种,不带符号的整数,第三种,不是整数。
- * 关于这三种情况,可以使用一个if-else if- else语句来实现,
- * 第一种情况:if ('+' == get[0] || '-' == get[0])带上了符号,可以直接忽略读取第[0]位符号位,然后再
- * 从最尾位开始读取,读取3位数即可停止,当读取途中不满三位数或者碰上符号位时,
- * 立即返回。
- * 第二种情况:if('0' <= get[0] && '9' >= get[0]) 直接是数字的情况下,跟第一种情况的思路基本一致,
- * 直接从最尾位开始取个位数,次尾位取十位数,倒数第三位取百位数。
- * 第三种情况:由于不符合需要的整数的转换条件,只需要直接返回false即可.
- * 另外,如果想将字符型的数字转换成数值,只需要将原来的字符型减去'0'即可得到相对应的数值。
- **/
- #include <cstring>
- #include <string>
- #include <cctype>
- #include <cmath>
- #include <iostream>
- using namespace std;
- bool getInt(string get, int & nowGet)
- {
- int stringLong = get.length();
- if (0 == stringLong){
- return false;
- }
- nowGet = 0;
- if ('+' == get[0] || '-' == get[0]){ // 带符号的正数或负数
- if (0 == (stringLong - 1)){ // 它只包含了一个符号,则直接返回
- return false;
- }
- for (int j = 0, i = stringLong - 1; i > 0 && i >= stringLong - 3; --i, ++j){
- if ('+' == get[i] || '-' == get[i]){ // 正在循环转换的过程,这个数字不满三位数,遇上了符号,直接跳出
- break;
- }
- nowGet += int(get[i] - '0') * (int) (pow(double(10), j));
- }
- return true;
- }
- else if('0' <= get[0] && '9' >= get[0]){ // 直接是数字的情况下
- for (int j = 0, i = stringLong - 1; i >= 0 && i >= stringLong - 3; --i, ++j){
- nowGet += int(get[i] - '0') * (int) (pow(double(10), j));
- }
- return true;
- }
- else{ // 是字母
- return false;
- }
- }
- int main()
- {
- string word;
- long result = 1;
- while(cin >> word){
- int temp;
- if (getInt(word, temp))
- {
- result = (result * temp) % 1000;
- }
- }
- cout << result << endl;
- return 0;
- }
0 0
- 乘积的末三位
- 乘积的末三位
- 习题3-3,乘积的末三位
- 算法竞赛入门经典3-3 乘积的末三位
- 乘积的末三位(product)~算法竞赛入门
- 算法竞赛入门经典 3-3 乘积的末三位 习题 3-4 计算器 习题3-5 旋转
- 乘积的末3位
- 乘积的末3位
- #乘积的末3位
- k次方的首末三位
- 末三位整数
- 末三位整数
- 末三位整数
- 求解13的13次方的末三位(10进制)
- 1992个1992的乘积的末两位数是多少?
- 习题3-3 乘积的末3位
- 编程挑战-高校俱乐部-末三位整数
- 算法竞赛入门经典 习题3-3乘积的末3位
- android中正确导入第三方jar包
- JQuery插件第四十一:表单输入框获取指定小数位并且四舍五入
- 判断日期是今天,昨天还是明天
- 总有一段时间我们会期待被放逐放逐到无尽的开阔
- hdu1716
- 乘积的末三位
- blog
- include注意点
- 算法竞赛入门经典第3章【小结与习题】
- 将秒数转换成NSDate,加上时区偏移
- 1007. 素数对猜想 (20)
- HttpRuntime.Cache缓存数据
- jsp乱码解决大全
- ios 获取当前时间汇总