累乘数字
题目描述
我们知道将一个大于1的数乘以另一个大于1的数会使乘积大于任意一个乘数。
现在给出两个数字 n, d,你能否计算将n乘以d次100的结果。
输入描述:
多组输入
每组输入在一行中给出 n,d,1≤n,d≤100。
输出描述:
每组输入输出一行代表答案。
示例1
输入
5 1 11 1 85 2
输出
500 1100 850000
描述:签到题,用循环输出一下就可以,千万别把结果算出来存在变量里再输出,因为结果数值太大了
/* * @Issue: 链接:https://ac.nowcoder.com/acm/contest/4462/F * @Author: 一届书生 * @LastEditTime: 2020-02-22 21:09:21 */ #include<iostream> #include<math.h> using namespace std; #define ll long long int main(){ ll n,d; while(cin>>n>>d){ cout<<n; for(int i=0;i<2*d;i++) cout<<0; //输出字符型的‘0‘好像会出错 cout<<endl; } return 0; }
方块涂色
题目描述
一块矩形区域被划分为了n行m列的小方格,初始情况下这些方格都是未被上色的。
为了使得矩形看起来不是单一的色彩,现在挑选出r行c列格子并将挑选出的格子上色。
请计算上色完成后,未上色格子的数目。
输入描述:
多组输入
每组输入在一行中给出四个数字 n, m, r, c,含义如题所示。
数据保证有 1≤n,m≤10^6,1≤r≤n,1≤c≤m。
输出描述:
每组输入输出一行代表答案。
示例1
输入
5 5 2 3
输出
6
说明
示例2
输入
3 2 2 1 2 4 2 4
输出
1 0
描述:这完全是个思维题目,想明白了,读懂题目就不难了,一行代码搞定,实例1中两行三列,完全可以这样涂,这样好理解,然后公式就出来了,看代码。
/* * @Issue: 链接:https://ac.nowcoder.com/acm/contest/4462/E * @Author: 一届书生 * @LastEditTime: 2020-02-22 21:16:00 */ #include<iostream> #include<math.h> using namespace std; #define ll long long int main(){ ll n,m,r,c; while(cin>>n>>m>>r>>c){ cout<<n*m-r*m-c*n+r*c<<endl; //only一行代码 } return 0; }
计算A+B
题目描述
在一行中给出一个字符串,请判断是否满足A + B格式,如果满足,输出计算结果,否则输出"skipped"。
此处A,B均为大于等于0的整数,不保证数据没有前导零。
输入描述:
第一行输入一个n,1≤n≤1000,n代表测试数据的组数。
接下来n行,每行输入一个长度不超过10000的字符串。
输出描述:
对于每组输入,输出结果
示例1
输入
4 2+2 1+2 +12 0+0
输出
4 3 skipped 0
描述:这个就有点难度了,主要是结果数值过大,不能用long long来存储,需要用数组来模拟
/* * @Issue: https://ac.nowcoder.com/acm/contest/4462/J * @Author: 一届书生 * @LastEditTime: 2020-02-23 11:51:21 */ #include<iostream> #include<string> using namespace std; int result[1000]; //存答案 void solve(){ string s; cin>>s; int len=s.length(); // 判断字符串中是否没有加号或者多个加号 int num=0,loc=0; //num代表字符串中'+'个数,loc代表'+'位置 for(int i=0;i<s.length()-1;i++){ if(s[i]=='+')num++,loc=i; } if(num!=1){ puts("skipped"); } // 判断字符串中加号是否在开头或者结尾 else if(s[0]=='+'||s[s.length()-1]=='+') puts("skipped"); // 格式正确 else{ int former=loc-1,later=len-1,a,b,cnt=0,last=0; //former记录前者遍历,later记录后者 // 去除前导零 int fo=0,lat=loc+1; while(s[fo]=='0')fo++; while(s[lat]=='0')lat++; if(fo>former&&lat>later){ puts("0"); return; } while(former>=fo||later>=lat){ a=b=0; if(former>=fo) a=s[former]-'0'; if(later>=lat) b=s[later]-'0'; result[cnt++]=(a+b+last)%10; //倒序记录答案 last=(a+b+last>9); //进位 former--;later--; } if(last)cout<<last; //不要忘了最后一个进位 for(int i=cnt-1;i>=0;i--) cout<<result[i]; cout<<endl; } } int main(){ int n; cin>>n; while(n--) solve(); return 0; }