else
{
s[i]=k;flag=0;add=0;
}
}
if (flag)
{
l=i+1;s[i]=add;
}
else
l=i;
for (i=0;i<l;i++)
t[l-1-i]=s[i]+‘0’;
t[l]=‘\0’;
}
int main()
{
int i;
cin>>a>>i;
mult(a,i,t);
cout<<t<<endl;
return 0;
}
大数加法
========
#include
#include
using namespace std;
char a[1000],b[1000],s[10000];
void add(char a[],char b[],char s[])//a被加数,b加数,s和
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char ) malloc(lsizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x=‘0’; else x=a[i];
if(j<0) y=‘0’; else y=b[j];
z=x-‘0’+y-‘0’;
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+‘0’;
i–;j–;
}
if(up) c[k++]=‘1’;
i=0;
c[k]=‘\0’;
for(k-=1;k>=0;k–)
s[i++]=c[k];
s[i]=‘\0’;
}
int main()
{
cin>>a>>b;
add(a,b,s);
cout<<s<<endl;
return 0;
}
大数减法
========
#include
using namespace std;
char a[1000],b[1000],s[10000];
void sub(char a[],char b[],char s[])
{
int i,l2,l1,k;
l2=strlen(b);l1=strlen(a);
s[l1]=‘\0’;l1–;
for (i=l2-1;i>=0;i–,l1–)
{
if (a[l1]-b[i]>=0)
s[l1]=a[l1]-b[i]+‘0’;
else
{
s[l1]=10+a[l1]-b[i]+‘0’;
a[l1-1]=b[l1-1]-1;
}
}
k=l1;
while(a[k]<0) {a[k]+=10;a[k-1]-=1;k–;}
while(l1>=0) {s[l1]=a[l1];l1–;}
loop:
if (s[0]==‘0’)
{
l1=strlen(a);
for (i=0;i<l1-1;i++) s[i]=s[i+1];
s[l1-1]=‘\0’;
goto loop;
}
if (strlen(s)==0) {s[0]=‘0’;s[1]=‘\0’;}
}
int main()
{
cin>>a>>b;
sub(a,b,s);
cout<<s<<endl;
return 0;
}
大数阶乘
========
#include
#include
using namespace std;
long a[10000];
int factorial(int n) //n为所求阶乘的n!的n
{
int i,j,c,m=0,w;
a[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;
c=a[j]/10000;
a[j]=a[j]%10000;
}
if(c>0) {m++;a[m]=c;}
}
w=m*4+log10(a[m])+1;
printf(“%ld”,a[m]); // 输出
for(i=m-1;i>=0;i–) //
printf(“%4.4ld”,a[i]);//
printf(“\n”);
return w; //返回值为阶乘的位数
}
储存方法很巧,每一个a[i]中存四位,不足四位在前加0补齐
大数求余
========
int mod(int B) //A为大数,B为小数
{
int i = 0,r = 0;
while( A[i] != ‘\0’ )
{
r=(r*10+A[i++]-‘0’)%B;
}
return r ; //r为余数
}
高精度任意进制转换
=============
#include
#include
using namespace std;
char s[1000],s2[1000]; // s[]:原进制数字,用字符串表示,s2[]:转换结果,用字符串表示
long d1,d2; // d1:原进制数,d2:需要转换到的进制数
void conversion(char s[],char s2[],long d1,long d2)
{
long i,j,t,num;
char c;
num=0;
for (i=0;s[i]!=‘\0’;i++)
{
if (s[i]<=‘9’&&s[i]>=‘0’) t=s[i]-‘0’; else t=s[i]-‘A’+10;
num=num*d1+t;
}
i=0;
while(1)
{
t=num%d2;
if (t<=9) s2[i]=t+‘0’; else s2[i]=t+‘A’-10;
num/=d2;
if (num==0) break;
i++;
}
for (j=0;j<=i/2;j++)
{c=s2[j];s2[j]=s2[i-j];s2[i-j]=c;}
s2[i+1]=‘\0’;
}
int main()
{
while (1)
{
cin>>s>>d1>>d2;
conversion(s,s2,d1,d2);
cout<<s2<<endl;
}
return 0;
}
判断一个数是否素数
#include //基本方法,n为所求数,返回1****位素数,0为合数
#include
using namespace std;
int comp(int n){
int i,flag=1;
for (i=2;i<=sqrt(n);i++)
if (n%i==0) {flag=0;break;}
if (flag==1) return 1; else return 0;}
素数表
int prime(int a[],int n) //小于n的素数
{ int i,j,k,x,num,*b;
n++;
n/=2;
b=(int )malloc(sizeof(int)(n+1)*2);
a[0]=2;a[1]=3;num=2;
for(i=1;i<=2*n;i++)
b[i]=0;
for(i=3;i<=n;i+=3)
for(j=0;j<2;j++)
{
x=2*(i+j)-1;
while(b[x]==0)
{
a[num++]=x;
for(k=x;k<=2*n;k+=x)
b[k]=1;
}
}
return num; } //小于n的素数的个数}
bool flag[1000000];
void prime(int M) //01表
{ int i , j;
int sq = sqrt(double(M));
for(i = 0 ;i < M ;i ++)
flag[i] = true;
flag[1] = false; flag[0] = false;
for(i = 2 ;i <= sq ;i++)
if(flag[i])
{
for(j = i*i ;j < M ;j += i)
flag[j] = false;
}
}
Miller_Rabin****随机素数测试算法
说明:这种算法可以快速地测试一个数是否
满足素数的必要条件,但不是充分条件。不
过也可以用它来测试素数,出错概率很小,
**对于任意奇数n>2和正整数****s,**该算法出错概率
至多为2^(-s),因此,增大s可以减小出错概
率,一般取s=50就足够了。
#include
#include
using namespace std;
int Witness(int a, int n)
{
int i, d = 1, x;
for (i = ceil( log( (float) n - 1 ) / log(2.0) ) - 1; i >= 0; i–)
{
x = d;
d = (d * d) % n;
if ( (d == 1) && (x != 1) && (x != n-1) )
return 1;
if ( ( (n - 1) & ( 1<<i ) ) >0 )
d = (d * a) % n;
}
return (d == 1 ? 0 : 1);
}
int Miller_Rabin(int n, int s)
{
int j, a;
for (j = 0; j < s; j++)
{
a = rand() * (n - 2) / RAND_MAX + 1;
if (Witness(a, n))
return 0;
}
return 1;
}
int main()
{
int x;
cin>>x;
cout<<Miller_Rabin(x , 50)<<endl;
return 0;
}
整数拆分不可重复
============
#include
#include
using namespace std;
const int MAX = 500;
long long data[MAX][MAX];
int main()
{
int i,j;
memset(data, 0, sizeof(int)*MAX);
for(i = 0; i < MAX; i++)
data[0][i] = 0;
for(i = 0; i < MAX; i++)
{
for(j = 0; j < MAX; j++)
{
int sum = j*(j+1)/2;
if(i > sum) data[i][j] = 0;
else if(i == sum) data[i][j] = 1;
else
{
if(i == j) data[i][j] = 1 + data[i][j-1];
else if(i < j) data[i][j] = data[i][i];
else data[i][j] = data[i-j][j-1] + data[i][j-1];
}
}
}
int n;
while(cin >> n)
cout << data[n][n] << endl;
return 0;
}
整数拆分积最大
int data[100];
void main(int n;)
{ int k = 2;
for(; n >= k; n-=k,k++)
data[k] = k;
for(int i = k-1; i >= 2 && n; i–, n–)
data[i]++;
data[k-1] += n;
for(int j = 2; j < k; j++)
cout << data[j] << " ";
cout << endl; }
整数的无序拆分(可重复)
================
#include //求出可分解个数
#include
using namespace std;
const int MAX = 600;
long long data[MAX][MAX];
int main()
{
int i,j;
memset(data, 0, sizeof(int)*MAX);
for(j = 0; j < MAX; j++)
data[0][j] = 0;
for(i = 1; i < MAX; i++)
{
for(j = 1; j < MAX; j++)
{
if(i == j)
data[i][j] = data[i][j-1]+1;
else if(i < j)
data[i][j] = data[i][i];
else
data[i][j] = data[i][j-1]+data[i-j][j];
}
}
int n;
while(cin >> n)
cout << data[n][n] << endl;
return 0;
}
整数的无序拆分(可重复)
================
#include //列出分解情况
#include
using namespace std;
const int MAX = 300;
int data[MAX];
int main()
{
int i,n;
cin >> n;
for(i = 0; i < n; i++)
{
data[i] = 1;
printf(“1”);
}
printf(“\n”);
int size = n;
while(size > 1)
{
int t, p, r;
t = data[size-1] + data[size-2];
p = t / (data[size-2]+1);
r = t % (data[size-2]+1);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来
目录:
部分内容截图:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
memory>
using namespace std;
const int MAX = 300;
int data[MAX];
int main()
{
int i,n;
cin >> n;
for(i = 0; i < n; i++)
{
data[i] = 1;
printf(“1”);
}
printf(“\n”);
int size = n;
while(size > 1)
{
int t, p, r;
t = data[size-1] + data[size-2];
p = t / (data[size-2]+1);
r = t % (data[size-2]+1);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-EqihAjEg-1712465073007)]
[外链图片转存中…(img-rnbI1Ukb-1712465073009)]
[外链图片转存中…(img-4rqxoTHd-1712465073010)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来
目录:
[外链图片转存中…(img-5tr4S057-1712465073011)]
部分内容截图:
[外链图片转存中…(img-coCCvRfc-1712465073011)]
[外链图片转存中…(img-M4Nx9J2a-1712465073012)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!