1001 A+B Format (20 分)
题目大意是把两个数字相加后三位数三位数的用‘,’隔开,需要注意的是,是从后往前数三个然后一个逗号,单独三位数第一个不需要输出逗号,写代码的时候这里出了一些问题,用了个flag来判断是不是第一次,需不要输出‘,’。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int counts(int i)
{
int length=1;
while(i/10)
{
length++;
i=i/10;
}
return length;
}
int main()
{
int a,b;
cin>>a>>b;
int c=a+b;
if(c<0)
{
c=-c;
cout<<'-';
}
int length=counts(c);
bool flag=true;
int q=length%3;
while(length--)
{
if((length+1)%3==0&&q<=0&&flag==false)
{
cout<<",";
}
cout<<int(c/pow(10,length));
c=c%int(pow(10,length));
flag=false;
q--;
}
}
大佬的代码:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";//除了是符号的情况下
//下标满足 (i + 1) % 3 == len %3 并且i不不是最后一位
}
return 0;
}
大佬写的很简洁,因为我不知道有to_string 这个函数 哭哭。
1002 A+B for Polynomials (25 分)
分析:
因为已经限定好范围了,所以用一个长度为1001的数组,下标是指数,值是系数。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float K,N[1001];
memset(N,0,sizeof(N));
cin>>K;
for(int i=0;i<K;i++)
{
int a;
float b;
cin>>a>>b;
N[a] +=b;
}
cin>>K;
for(int i=0;i<K;i++)
{
int a;
float b;
cin>>a>>b;
N[a] +=b;
}
int length=0;
for(int i=1000;i>=0;i--)
if(N[i]!=0)
length++;
cout<<length;
for(int i=1000;i>=0;i--)
if(N[i]!=0)
printf(" %d %.1f",i,N[i]);
}