“天意终究难参,假若登顶成憾,与君同添|

zsdqwq

园龄:3年6个月粉丝:9关注:17

2022-02-27 15:09阅读: 170评论: 0推荐: 0

高精度汇总

Part.1 前言

本文的前身:

最后,经过 zzds 长达 2 小时的整理,和大佬们的贡献,高精度板子汇总,终于出来啦,同时,本文将同步更新于博客园,欢迎继续投稿;

Part.2 正文

高精度的基本操作、基本过程什么的,上面的高精度板子基础版已经都说过了,现在这一章节要讲的,是关于高精度的一些进阶操作。

1-高精度加法

(以下代码均验证正确)

语言:C++

提供人:@蝴蝶小队队长

代码:

#include<bits/stdc++.h>
using namespace std;
int p[500],q[500],r[501],ga=0;
string _cmp;
string a,b;
bool check()
{
    if(b.size()>a.size())return true;
    if(a.size()>b.size())return false;
    for(int i=0;i<a.size();i++)
    {
        if(b[i]>a[i])return true;
        if(a[i]>b[i])return false;
    }
    return false;
}
void jia()
{
    int jinwei=0,s=a.size()-1,x=b.size()-1;
    for(int i=0;i<a.size();i++)
    {
        p[i]=a[s]-'0';
        s--;
    }
    for(int i=0;i<b.size();i++)
    {
        q[i]=b[x]-'0';
        x--;
    }
    int l=max(a.size(),b.size());
    for(int i=0;i<l;i++)
    {
        r[i]=p[i]+q[i]+jinwei;
        jinwei=r[i]/10;
        r[i]%=10;
    }
    if(jinwei!=0){r[l]=jinwei;l++;}
    for(int i=l-1;i>=0;i--)cout<<r[i];
}
int main()
{
    getline(cin,a);
    getline(cin,b);
    jia();
    cout<<endl;
    return 0;
}

语言:C;

提供人:@清风雪月

代码:

#include<stdio.h>
#include<string.h>
#define n 505
int main()
{
    char a[n],b[n];
    int a1[n]={0},b1[n]={0},c[n]={0},max;
    scanf("%s%s",a,b);
    for(int i=0;i<strlen(a);i++)
        a1[strlen(a)-1-i]=a[i]-'0';
    for(int i=0;i<strlen(b);i++)
        b1[strlen(b)-1-i]=b[i]-'0';
    max=strlen(a);
    if(strlen(a)<strlen(b))
        max=strlen(b);
    for(int i=0;i<=max;i++)
    {
        c[i]+=a1[i]+b1[i];
        c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
    if(max>0&&c[max]==0)
        max--;
    for(int i=max;i>=0;i--)
        printf("%d",c[i]);
}

语言:C++;

提供人:@ttys000

代码:

#include <bits/stdc++.h>
using namespace std;
string a, b;
string add(string a, string b)
{
  string ans = "";
  reverse(a.begin(), a.end()), reverse(b.begin(), b.end());
  int len = max(a.length(), b.length());
  while (a.length() < len)
    a.push_back('0');
  while (b.length() < len)
    b.push_back('0');
  int pos, c = 0;
  for (int i = 0; i < len; i++)
  {
    pos = (a[i] - '0') + (b[i] - '0');
    if (c)
      pos++, c = 0;
    c = pos / 10;
    ans.push_back('0' + pos % 10);
  }
  if (c)
    ans.push_back('1');
  reverse(ans.begin(), ans.end());
  return ans;
}
int main()
{
  cin >> a >> b;
  cout << add(a, b) << endl;
  return 0;
}

(我的代码请见上一篇文章,这里不打了,害怕代码行数过多)

语言:java;

提供人:@清风雪月

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println(input.nextBigInteger().multiply(input.nextBigInteger()));

    }
}

语言:C++;

提供人:@辰星凌

代码:

#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000],c[1000];
char st[1000];
int main(){
    scanf("%s",st);
    int lena,lenb,lenc;
    lena =strlen(st);
    for(int i=1;i<=lena;i++)a[i]=st[lena-i]-'0';
    scanf("%s",st);
    lenb=strlen(st);
    for(int i=1;i<=lenb;i++)b[i]=st[lenb-i]-'0';
    if(lena>lenb)lenc=lena;
    else lenc=lenb;
    for(int i=1;i<=lenc;i++){
        c[i]=a[i]+b[i]+c[i];
        c[i+1]=c[i+1]+c[i]/10;
        c[i]=c[i]%10;
    }
    if(c[lenc+1])lenc++;
    for(int i=lenc;i>0;i--)printf("%d",c[i]);
}

2-高精度减法

(以下代码均验证正确)

语言:C++

提供人:@蝴蝶小队队长

#include<bits/stdc++.h>
using namespace std;
int p[500],q[500],r[501],ga=0;
string _cmp;
string a,b;
bool check()
{
    if(b.size()>a.size())return true;
    if(a.size()>b.size())return false;
    for(int i=0;i<a.size();i++)
    {
        if(b[i]>a[i])return true;
        if(a[i]>b[i])return false;
    }
    return false;
}
void jian()
{
    if(check())
    {
        _cmp=a;
        a=b;
        b=_cmp;
        cout<<'-'; 
    }
    int s=a.size()-1,x=b.size()-1;
    for(int i=0;i<a.size();i++)
    {
        p[i]=a[s]-'0';
        s--;
    }
    for(int i=0;i<b.size();i++)
    {
        q[i]=b[x]-'0';
        x--;
    }
    int l=max(a.size(),b.size());
    for(int i=0;i<l;i++)
    {
        if(p[i]-q[i]<0)
        {
            p[i]+=10;
            p[i+1]--;
        }
        r[i]=p[i]-q[i];
    }
    int flg=0;
    for(int i=l-1;i>=0;i--)
    {
        if(r[i]==0&&flg==0)continue;
        if(r[i]!=0)flg=1;
        cout<<r[i];
        ga=1;
    }
    if(ga==0)cout<<0;
}
int main()
{
    getline(cin,a);
    getline(cin,b);
    memset(r,0,sizeof(r));
    jian();
    return 0;
}

3-高精度乘法

语言:C++;

提供人:@清风雪月

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main ()
{
    cin>>a1>>b1;
    int lena=strlen(a1);
    int lenb=strlen(b1);
    for(i=1;i<=lena;i++)a[i]=a1[lena-i]-'0';
    for(i=1;i<=lenb;i++)b[i]=b1[lenb-i]-'0';
    for(i=1;i<=lenb;i++)
    for(j=1;j<=lena;j++)
    c[i+j-1]+=a[j]*b[i];
    for(i=1;i<lena+lenb;i++)
    if(c[i]>9)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
    len=lena+lenb;
    while(c[len]==0&&len>1)len--;
    for(i=len;i>=1;i--)cout<<c[i];
    return 0;
}

语言:C++;

提供人:@今天也要开心a

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+50;
const double PI=acos(-1);
int n,m,tot,bit,rev[N];
string ax,bx;
struct Complex {
    double x,y;
    Complex operator+(const Complex &t)const {
        return {x+t.x,y+t.y};
    }
    Complex operator-(const Complex &t)const {
        return {x-t.x,y-t.y};
    }
    Complex operator*(const Complex &t)const {
        return {x*t.x-y*t.y,x*t.y+y*t.x};
    }
}a[N],b[N];
void fft(Complex a[],int inv) {
    for(int i=0;i<tot;++i)
        if(i<rev[i]) swap(a[i],a[rev[i]]);
    for(int mid=1;mid<tot;mid<<=1) {
        Complex w1={cos(PI/mid),inv*sin(PI/mid)};
        for(int i=0;i<tot;i+=mid*2) {
            Complex wk={1,0};
            for(int j=0;j<mid;++j,wk=wk*w1) {
                Complex x=a[i+j],y=wk*a[i+j+mid];
                a[i+j]=x+y,a[i+j+mid]=x-y;
            }
        }
    }
}
int ans[N];
int main() {
    cin>>ax>>bx;
    n=ax.size()-1,m=bx.size()-1;
    for(int i=n,j=0;i>=0;--i,++j) a[i].x=ax[j]-'0';
    for(int i=m,j=0;i>=0;--i,++j) b[i].x=bx[j]-'0';
    while((1<<bit)<n+m+1) bit++;
    tot=1<<bit;
    for(int i=0;i<tot;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(bit-1));
    fft(a,1),fft(b,1);
    for(int i=0;i<tot;++i) a[i]=a[i]*b[i];
    fft(a,-1);
    for(int i=0;i<n+m+1;++i) ans[i]=(int)(a[i].x/tot+0.5);
    int cnt=0;
    while(ans[cnt]||cnt<=n+m+1) ans[cnt+1]+=ans[cnt]/10,ans[cnt]%=10,cnt++;
    if(ans[cnt-1]==0) cnt--;
    while(cnt--) cout<<ans[cnt];
    return 0;
}

语言:C++;

提供人:@辰星凌

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
    char a1[10005],b1[10005];
    int a[100005],b[100005],c[100005],lena,lenb,lenc,i,j,x;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    gets(a1);gets(b1);
    lena=strlen(a1);lenb=strlen(b1);
    for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;
    for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;
    for(i=1;i<=lena;i++){
        x=0;                                               
        for(j=1;j<=lenb;j++){
            c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
            x=c[i+j-1]/10;
            c[i+j-1] %= 10;
        }
        c[i+lenb]=x;                             
    }
    lenc=lena+lenb;
    while(c[lenc]==0&&lenc>1)lenc--;
    for(i=lenc;i>=1;i--)cout<<c[i];
    cout<<endl;
}

(我的代码请见上一篇文章)

语言:C;

提供人:@清风雪月

代码:

#include<stdio.h>
#include<string.h>
void multiply(char* a, char* b) {
    int i, j, f = 0, k = 0;
    int c[11000] = { 0 }, cnt = 0;
    for (i = strlen(a) - 1; i >= 0; --i) {
        k = cnt;
        for (j = strlen(b) - 1; j >= 0; --j) {
            c[k++] += (a[i] - '0') * (b[j] - '0');

        }
        ++cnt;
    }
    i = 0;
    while(c[i]!=0){
        c[i] += f;
        f = c[i]/10;
        c[i] %= 10;
        ++i;
    }
    if (f > 0) {
        c[i] = f;
    }
    else
        --i;
    int flag = 0;
    for (j = i; j >= 0; --j) {
        printf("%d", c[j]);
    }
    return;
}
int main() {
    char a[11000], b[11000];
    scanf("%s%s", a, b);
    if (strcmp(a, "0") == 0 || strcmp(b, "0") == 0) {
        printf("0");
        return 0;
    }
    multiply(a, b);
    return 0;
}

语言:java;

提供人:@清风雪月

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println(input.nextBigInteger().multiply(input.nextBigInteger()));

    }
}

4-高精度除法

语言:C++;

提供人:@清风雪月

代码:

#include <bits/stdc++.h>
char s1[5005]={0},s2[10000]={0};
int a[5005]={0},b[10000]={0},c[5005]={0};
long long l1,l2,lc,m,x=0;
int main()
{
    scanf("%s",s1);
    scanf("%d",&m);
    l1 = strlen(s1);
    for (int i=1;i<=l1;i++)
    {
        a[i] = s1[i-1]-'0';
    }
    for (int i=1;i<=l1;i++)
    {
        c[i] = (x*10+a[i])/m;
        x  = (x*10+a[i])%m;
    }
    lc = 1;
    while (c[lc]==0&&lc<l1)
    lc++;
    for (int i=lc;i<=l1;i++)
    {
        printf("%d",c[i]);
    }
    return 0;
}

语言:C;

提供人:@清风雪月

代码:

#include<stdio.h>
int main() {
    char a[11000];
    int mod, i, j = 0, divide = 0, surplus;
    scanf("%s%d", a, &mod);
    if (strcmp(a, "0") == 0) {
        printf("0");
        return 0;
    }
    for (i = 0; i < strlen(a); ++i) {
        divide = divide * 10 + (a[i] - '0');
        if (divide / mod != 0)
            ++j;
        if (j == 0)
            continue;
        printf("%d", divide / mod);
        divide %= mod;
    }
    if (j == 0)
        printf("9");
    return 0;
}

语言:java;

提供人:@清风雪月

代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in =new Scanner(System.in);
        String str1;
        boolean flag=false;
        long a,anum=0,bnum=0,cnum=0;
        str1=in.next();
        a=in.nextInt();

        char[] g=str1.toCharArray();
        for(int i=0;i<str1.length();i++){
              anum=g[i]-'0';
              bnum=bnum*10+anum;
              cnum=bnum/a;
              bnum=bnum%a;
            if(flag||cnum!=0){

                flag=true;
                System.out.print(cnum);
            }
        }

    }
}

5-板子の大合集

语言:python;

提供人:@渡鸦2007

代码:

a=int(input())
b=int(input())
print(a+b)
print(a-b)
print(a*b)
print(a/b)

语言:C++;

提供人:@辰星凌

代码:

#include<cstring>
#include<cstdio>
#define LL long long
#define Re register int
using namespace std;
const int base=1e8;
const int N=1e4+10;
int aux[N<<3];
struct Int{
    int s[N],l;
    inline void CL(){l=0;memset(s,0,sizeof(s));}
    inline void pr(){
        printf("%d",s[l]);
        for(Re i=l-1;i;i--)printf("%08d",s[i]);
    }
    inline void re_l(){
        Re i,x=0,k=1,L=0,fl,o;char c=getchar();
        for(;c<'0'||c>'9';c=getchar());
        for(;c>='0'&&c<='9';c=getchar()){if(!(L-1)&&!aux[L])L--;aux[++L]=c-'0';}
        CL();l=L/8+((o=L%8)>0);
        for(i=1;i<=o;i++)x=x*10+aux[i];
        if(o)s[l]=x;fl=!o?l+1:l;
        for(i=o+1,x=0;i<=L;i++,k++){
            x=x*10+aux[i];
            if(!(k^8))s[--fl]=x,x=k=0;
        }
        if(!l)l=1;
    }
    inline LL toint(){
        LL x=0;
        for(Re i=l;i;i--)x=x*base+s[i];
        return x;
    }
    inline Int operator=(Re b){
        CL();
        do s[++l]=b%base,b/=base;while(b>0);
        return *this;
    }
    inline Int operator=(LL b){
        CL();
        do s[++l]=b%base,b/=base;while(b>0);
        return *this;
    }
    inline Int operator+(const Re &b){
        Int c=*this;LL x=b;
        for(Re i=1;i<=l&&x;i++)x=x+c.s[i],c.s[i]=x%base,x/=base;
        if(x)c.s[++c.l]=x;
        return c;
    }
    inline Int operator+(const LL &b){
        Int c=*this;LL x=b;
        for(Re i=1;i<=l&&x;i++)x=x+c.s[i],c.s[i]=x%base,x/=base;
        if(x)c.s[++c.l]=x;
        return c;
    }
    inline Int operator+(Int &b){
        if(b.l<3)return *this+b.toint();
        Int c;LL x=0;Re k=l<b.l?b.l:l;c.CL(),c.l=k;
        for(Re i=1;i<=k;i++)x=x+s[i]+b.s[i],c.s[i]=x%base,x/=base;
        if(x)c.s[++c.l]=x;
        return c;
    }
    inline Int operator-(const Int &b){
        Int c,d=*this;LL x=0;c.CL();
        for(Re i=1;i<=l;i++){
            if((x=d.s[i])<b.s[i])d.s[i+1]--,x+=base;
            c.s[i]=x-b.s[i];
        }
        c.l=l;
        for(;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator-(const Re &b){Int c;return *this-(c=b);}
    inline Int operator-(const LL&b){Int c;return *this-(c=b);}
    inline Int operator*(const Re &b){
        Int c;LL x=0;c.CL();
        for(Re i=1;i<=l;i++)x=x+1LL*s[i]*b,c.s[i]=x%base,x/=base;
        for(c.l=l;x;x/=base)c.s[++c.l]=x%base;
        return c;
    }
    inline Int operator*(Int&b){
        if(b.l<2)return *this*b.toint();
        Int c;LL x;Re i,j,k;c.CL();
        for(i=1;i<=l;i++){
            x=0;
            for(j=1;j<=b.l;j++)x=x+1LL*s[i]*b.s[j]+c.s[k=i+j-1],c.s[k]=x%base,x/=base;
            if(x)c.s[i+b.l]=x;
        }
        for(c.l=l+b.l;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator*(const LL &b){
        Int c;
        if(b>2e9){c=b;return *this*c;}
        LL x=0;c.CL();
        for(Re i=1;i<=l;i++)x=x+b*s[i],c.s[i]=x%base,x/=base;
        for(c.l=l;x;x/=base)c.s[++c.l]=x%base;
        return c;
    }
    inline Int operator/(const Re &b){
        Int c;LL x=0;c.CL();
        for(Re i=l;i;i--)c.s[i]=(x*base+s[i])/b,x=(x*base+s[i])%b;
        for(c.l=l;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator/(const LL&b){
        Int c;LL x=0;c.CL();
        for(Re i=l;i;i--)c.s[i]=(x*base+s[i])/b,x=(x*base+s[i])%b;
        for(c.l=l;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator/(Int&b){
        if(b.l<2)return *this/b.toint();
        Int c,d;Re i,j,le,r,mid,k;c.CL();d.CL();
        for(i=l;i;i--){
            for(j=++d.l;j>1;j--)d.s[j]=d.s[j-1];
            d.s[1]=s[i];
            if(d<b)continue;
            le=k=0;r=base-1;
            while(le<=r){
                mid=(le+r)>>1;
                if(b*mid<=d)le=mid+1,k=mid;
                else r=mid-1;
            }
            c.s[i]=k,d=d-b*k;
        }
        for(c.l=l;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator%(const Re &b){
        Int c;LL x=0;c.CL();
        for(Re i=l;i;i--)x=(x*base+s[i])%b;
        return c=x;
    }
    inline Int operator%(const LL&b){
        Int c;LL x=0;c.CL();
        for(Re i=l;i;i--)x=(x*base+s[i])%b;
        return c=x;
    }
    inline Int operator%(Int&b){
        if(b.l<2)return *this%b.toint();
        Int c;Re i,j,le,r,mid,k;c.CL();
        for(i=l;i;i--){
            for(j=++c.l;j>1;j--)c.s[j]=c.s[j-1];
            c.s[1]=s[i];
            if(c<b)continue;
            le=k=0,r=base-1;
            while(le<=r){
                mid=(le+r)>>1;
                if(b*mid<=c)le=mid+1,k=mid;
                else r=mid-1;
            }
            c=c-b*k;
        }
        for(;!c.s[c.l]&&c.l>1;c.l--);
        return c;
    }
    inline Int operator+=(Int&b){return *this=*this+b;}
    inline Int operator+=(LL&b){return *this=*this+b;}
    inline Int operator+=(Re &b){return *this=*this+b;}
    inline Int operator-=(Int&b){return *this=*this-b;}
    inline Int operator-=(LL&b){return *this=*this-b;}
    inline Int operator-=(Re &b){return *this=*this-b;}
    inline Int operator*=(Int&b){return *this=*this*b;}
    inline Int operator*=(LL&b){return *this=*this*b;}
    inline Int operator*=(Re &b){return *this=*this*b;}
    inline Int operator/=(Int&b){return *this=*this/b;}
    inline Int operator/=(LL&b){return *this=*this/b;}
    inline Int operator/=(Re &b){return *this=*this/b;}
    inline Int operator%=(Int&b){return *this=*this%b;}
    inline Int operator%=(LL&b){return *this=*this%b;}
    inline Int operator%=(Re &b){return *this=*this%b;}
    inline bool operator<(const Int&b)const{
        if(l^b.l)return l<b.l;
        for(Re i=l;i;i--)if(s[i]^b.s[i])return s[i]<b.s[i];
        return 0;
    }
    inline bool operator<=(const Int&b)const{
        if(l^b.l)return l<b.l;
        for(Re i=l;i;i--)if(s[i]^b.s[i])return s[i]<b.s[i];
        return 1;
    }
    inline bool operator>(const Int&b)const{
        if(l^b.l)return l>b.l;
        for(Re i=l;i;i--)
            if(s[i]^b.s[i])return s[i]>b.s[i];
        return 0;
    }
    inline bool operator>=(const Int&b)const{
        if(l^b.l)return l>b.l;
        for(Re i=l;i;i--)if(s[i]^b.s[i])return s[i]>b.s[i];
        return 1;
    }
    inline bool operator==(const Int&b)const{
        if(l^b.l)return 0;
        for(Re i=l;i;i--)if(s[i]^b.s[i])return 0;
        return 1;
    }
    inline bool operator!=(const Int&b)const{
        if(l^b.l)return 1;
        for(Re i=l;i;i--)if(s[i]^b.s[i])return 1;
        return 0;
    }
    inline bool operator<(LL b)const{Int c;return *this<(c=b);}
    inline bool operator<=(LL b)const{Int c;return *this<=(c=b);}
    inline bool operator>(LL b)const{Int c;return *this>(c=b);}
    inline bool operator>=(LL b)const{Int c;return *this>=(c=b);}
    inline bool operator==(LL b)const{Int c;return *this==(c=b);}
    inline bool operator!=(LL b)const{Int c;return *this!=(c=b);}
    inline bool operator<(Re b)const{Int c;return *this<(c=b);}
    inline bool operator<=(Re b)const{Int c;return *this<=(c=b);}
    inline bool operator>(Re b)const{Int c;return *this>(c=b);}
    inline bool operator>=(Re b)const{Int c;return *this>=(c=b);}
    inline bool operator==(Re b)const{Int c;return *this==(c=b);}
    inline bool operator!=(Re b)const{Int c;return *this!=(c=b);}
};
Int a,b;
int main(){
    a.re_l();
    b.re_l();
    a.pr();printf("+");b.pr();printf("=");(a+b).pr();printf("\n");
    a.pr();printf("-");b.pr();printf("=");
    if(a<b){putchar('-');(b-a).pr();}
    else(a-b).pr();printf("\n");
    a.pr();printf("*");b.pr();printf("=");(a*b).pr();printf("\n");
    a.pr();printf("/");b.pr();printf("=");(a/b).pr();printf("\n");
    a.pr();printf("%%");b.pr();printf("=");(a%b).pr();printf("\n");
    if(a<b)printf("a<b\n");
    if(a<=b)printf("a<=b\n");
    if(a>b)printf("a>b\n");
    if(a>=b)printf("a>=b\n");
    if(a==b)printf("a==b\n");
    if(a!=b)printf("a!=b\n");
}

还有一篇很好的文章:高精模板

文章高精板子完整版

by5k_sync_closer

依次是加减乘除Link

by 养猫的鱼

还有一位大佬DarkBird的

这里偷懒是因为害怕太多了,都800多行了 QAQ

Part.3 致谢

感谢上述所有提供了代码和思路的朋友们,也感谢认真观看完了正片文章的您。

本位为作者 zzds 所作,请在应用处进行声明,谢谢。

Part.4 结束

结束,868行,收工!

本文作者:zsdqwq

本文链接:https://www.cnblogs.com/wo-de-bo-ke-wo-zuo-zhu/p/15942389.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   zsdqwq  阅读(170)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示