大数加法

题目描述
输入两个正整数a,b,输出a+b的值。 
输入
两行,第一行a,第二行b。a和b的长度均小于1000位。
输出
一行,a+b的值。 
样例输入
4 
2 
样例输出
6
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[1001];
int main()
{
    int i=0,j=0;
    int x;
    string s1,s2;
    cin>>s1>>s2;
    int len1=s1.length();
    int len2=s2.length();
    if(len1<len2)
    {
        swap(len1,len2);
        swap(s1,s2);
    }
    for(i=0; i<len1; i++)
    {
        a[i]=s1[len1-i-1]-'0';
    }
    for(i=0; i<len2; i++)
    {
        b[i]=s2[len2-i-1]-'0';
    }
    int flag=0;
    int k=0;
    for(i=0; i<len1; i++)
    {
        c[k]=a[i]+b[i]+flag;
        flag=0;
        if(c[k]>9)
        {
            c[k]=c[k]%10;
            flag=1;
        }
        k++;
    }
    c[k]=flag;
    if(c[k]!=0)
        cout<<c[k];
    for(i=k-1; i>=0; i--)
    {
        cout<<c[i];
    }
    return 0;
}
请编写程序 
输入字符串 
输出该字符串最多能断成多少截完全一样的子串 

样例说明 
最多能断成四个”abc”,也就是abc重复四遍便是原串 
同时也能断成两个”abcabc” 
最坏情况是断成一个原串”abcabcabcabc” 
数据规模和约定 
字符串长度< =1000 

输入
一行,一个字符串 
输出
一行,一个正整数表示该字符串最多能断成的截数 
样例输入
abcabcabcabc 
样例输出
4
这个题是模拟,主要是对substr的掌握
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
string s;
int kepa(int n)
{
    if(s.length()%n==0)
        return 1;
    return 0;
}
int main()
{
    cin>>s;
    int i,j;
    int ans=1;
    for(i=1;i<s.length();i++)
    {
            if(kepa(i))
            {
                int t=s.length()/i;
                int  flag=0;
                string s1=s.substr(0,t);
                for(j=1;j<i;j++)
                {
                    if(s.substr(j*t,t)!=s1)
                    {
                        flag=1;
                        break;
                    }
                }
                if(flag==0)
                {
                    ans=i;
                }
            }
        }
        cout<<ans<<endl;
    return 0;
}

高精度乘法

输入
两行,每行一个正整数,每个整数不超过10000位 
输出
一行,两个整数的乘积。 
样例输入
99 
101 
样例输出
9999
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
 int c[21000],a[21000],b[21000];
int main()
{
string s1,s2;
cin>>s1>>s2;
int i,j;
if(s1.length()<s2.length())
    swap(s1,s2);
int len1=s1.length();
int len2=s2.length();
for(i=0;i<len1;i++)
{
    a[i]=s1[len1-i-1]-'0';
}
for(i=0;i<len2;i++)
{
    b[i]=s2[len2-i-1]-'0';
}
if(a[0]==0&&len1==1||b[0]==0&&len2==1)
{
    cout<<0<<endl;
    return 0;
}
for(i=0;i<len1;i++)
{
    for(j=0;j<len2;j++)
    {
        c[i+j]+=a[i]*b[j];
    }
}
for(i=0;i<len1;i++)
{
    if(c[i]>=10)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
}
for(i=len1+3;i>=0;i--)
{
    if(c[i]!=0)
        break;
}
for(j=i;j>=0;j--)
{
    cout<<c[j];
}
cout<<endl;
return 0;
}

 

posted on 2019-03-02 20:34  可怕hiahia  阅读(214)  评论(0编辑  收藏  举报