首页 > 其他分享 >U255813 争宠题解

U255813 争宠题解

时间:2022-11-20 13:36:18浏览次数:80  
标签:lc int 题解 s1 len else U255813 s2 争宠

题目传送门

#include <bits/stdc++.h>
using namespace std;
void jia(string s1,string s2){
    bool aaa=0;
    int a[5010],b[5010],c[5010];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int la=s1.length();
	int lb=s2.length();
	int lc;
    if(la>lb){
		lc=la;
	}else{
		lc=lb;
	}
	for(int i=0;i<la;i++){
		a[la-i]=s1[i]-'0';
	}
	for(int i=0;i<lb;i++){
		b[lb-i]=s2[i]-'0';
	}
	for(int i=1;i<=lc;i++){
		c[i]=a[i]+b[i];
		if(aaa==1){
			c[i]++;
		}
		if(c[i]>=10){
			c[i]=c[i]-10;
			aaa=1;
		}else{
			aaa=0;
		}
	}
	if(aaa==1){
		lc++;
		c[lc]=1;
	}
	bool bbb=0;
	for(int i=lc;i>0;i--){
		if(c[i]==0&&bbb==0&&i>1){
		}else{
			cout<<c[i];
			bbb=1;
		}
	}
}
void jian(string s1,string s2){
	int l=0,l1=0,c[10005]={0},p=0;//每一位的差
	string a=s1,b=s2;
	a='0'+a;
	b='0'+b;//将第0位占0
	if(a.size()<b.size()||(a.size()==b.size()&&a<b))//假如a<b
	{
		cout<<'-';//结果为负数,先输出减号
		swap(a,b);//交换两个数(例如3-5可以变为0-(5-3)),这样子方便后面计算
	}
	l=a.size();
	l1=b.size();
	while(l1<l)//因为已经确保这时b<a了,所以直接在b前面添0
	{
		b='0'+b;
		l1++;
	}//利用c++的特性让个位对齐
	for(int i=1;i<l;i++)c[i]=a[i]-b[i];//计算差
	while(1)//用来退位,因为可能要多次退位,所以用while循环
	{
	p=1;//开关,用来看是否需要退位
	for(int i=1;i<l;i++)
	{
		if(c[i]<0)//需要退位
		{
			c[i-1]--;//向前一位退位
			c[i]=10+c[i];
			p=0;//开关置零,需要重新复查
		}
	}
	if(p)break;//不需要退位了,就退出
	}
	p=1;
	for(int i=1;i<l;i++){
		if(c[i]!=0)p=0;
		if(p==0)cout<<c[i];//特判前导0
	}
	if(p==1)cout<<0;//特判,可能结果本身就为0
}
void cheng(string s1,string s2){
	int a[300001]={0},b[300001]={0},i=0,x=0,len=0,j=0,c[300001]={0};
    a[0]=s1.length();b[0]=s2.length();//计算长度
    for (i=1;i<=a[0];++i)a[i]=s1[a[0]-i]-'0';//将字符串转换成数字
    for (i=1;i<=b[0];++i)b[i]=s2[b[0]-i]-'0';
    for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];//按乘法
    len=a[0]+b[0];                                       //原理进行高精乘
    for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}//进位
    while (c[len]==0&&len>1)len--;//判断位数
    for (i=len;i>=1;--i)cout <<c[i];//输出
}
void chu(string a,int b){
	int i=0,d=0;
	string c;
    for (;i<a.length();i++)a[i]-=48;   //字符串转数字
    for (i=0;i<a.length();i++)
        c.push_back((d*10+a[i])/b+48),d=(d*10+a[i])%b;  //模拟竖式
    for (i=0;c[0]==48;i++)c.erase(c.begin(),c.begin()+1);   //去0
    cout<<c;   //华丽的输出
}
int main(){
    string s1,s2;
    char q;
    cin>>s1>>q>>s2;
    while(1){}//抄袭可耻
    if(q=='+'){
        jia(s1,s2);
    }else if(q=='-'){
        jian(s1,s2);
    }else if(q=='*'){
        cheng(s1,s2);
    }else{
		int b;
		for(int i=0;i<s2.length();i++){
			b=b+s2[i]-'0';
			if(i!=s2.length()-1){
				b=b*10;
			}
		}
        chu(s1,b);
    }
    return 0;
}

标签:lc,int,题解,s1,len,else,U255813,s2,争宠
From: https://www.cnblogs.com/Zhao-zzZ/p/U255813_zhengchongtijie.html

相关文章

  • AtCoder Beginner Contest 278题解
    A-Shift题意给一个长度为\(n\)的数组,有\(k\)次操作,每次操作会将数组最前面的元素删掉,再在数组最后面加上一个0元素,问\(k\)次操作后的数组中的数字。思路看\(n\)与\(k......
  • Codeforces 704 B Antman 题解 (dp,贪心,结论)
    题目链接这题两种不同做法,普通的\(O(n^2)\)和奇怪的\(O(nlogn)\)。如果用\(O(nlogn)\)的话可以加强到1e6。做法1时间复杂度\(O(n^2)\)先把最终的排列随便画一个出来观......
  • C. Sum of Substrings题解
    C.SumofSubstrings题目大概意思,给你一个01串,求和最小,其中和是该串所有相邻字符所组成的十进制数的和。如:0110,sum=01+11+10=22。通过观察我们可以发现,除了第......
  • cf796部分题解
    C.ManipulatingHistory题意:给出一些字符串,有原始串(只含一个字符的串)、被替换的串、替换串、最终串(最后一行),求原始串。2aabbcdacdInitiallysis"a".Inthe......
  • B - Bracket Sequence题解
    B-BracketSequence思路:用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作。对于最外层的数,是没有计算的。所以最后要单独......
  • Auxiliary Set题解
    FAuxiliarySet树上LCA+DFS注意一下输出格式!#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intt,n,q,ans;intfa[N];//存储点i的......
  • 广东工业大学第十六届程序设计竞赛题解(部分)
    E爬塔方法一:二分做法预处理每个点所能到达的最远距离,存到vector里边,然后二分处理结果#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,......
  • F - Subarrays题解
    F-Subarrays题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。因为求的是前缀和,......
  • G water testing题解
    Gwatertesting题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。思路:皮克定理+叉乘计算三角形面积:皮克定理是指一个计算点......
  • Frogger题解
    Frogger法一:floyd#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<iomanip>#defineintlonglongintusingn......