问题一:判断一个数是否是回文数。
回文数在笔试中经常出现,除了字符串操作和数据机构外的考题经常出现。
回文数也就是一个思维,也就是使用一个循环,基本上自己书写一遍就不会再觉得很难了。它的变形可能是判断一个字符串数字是否是回文数,这时只需将数字变为数组即可。
下面是一个判断一个数字是否是回文数的例程。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int in_data = 123321;
int data = in_data;
int num = 0;
int new_data = 0;
while(data)
{
num = data%10;
new_data = new_data*10+num;
data = data/10;
}
cout<<"new data:"<<endl;
cout<<new_data<<endl;
if (new_data == in_data)
cout<<"this is a huihuan data!"<<endl;
else
cout<<"Wrong data!"<<endl;
return 0;
}
问题二:求两个数的最大公约数(辗转相除法)
算法讲解第一问题,求两个数的最大公约数;
#include <iostream>
#include <string.h>
using namespace std;
int max_gongyueshu(int a, int b)
{
int max;
int min;
max = a>b?a:b;
min = a>b?b:a;
if (max%min == 0)
return min;
else
return max_gongyueshu(min,max%min);
}
int main()
{
int a = 15750;
int b = 27216;
printf("The max gongyueshu is: %d\n",max_gongyueshu(a,b));
return 0;
}
问题三:求两个数的最小公倍数
最小公倍数 = 两个数的乘积/最小公约数;
#include <iostream>
#include <string.h>
using namespace std;
int max_gongyueshu(int a, int b)
{
int max;
int min;
max = a>b?a:b;
min = a>b?b:a;
if (max%min == 0)
return min;
else
return max_gongyueshu(min,max%min);
}
int main()
{
int a = 15;
int b = 9;
printf("The max gongyueshu is: %d\n",max_gongyueshu(a,b));
printf("The min gongbeishu is :%d\n",a*b/max_gongyueshu(a,b));
return 0;
}
问题四:大数相乘
大数的乘法直接使用小学的进位方法实现,主要思想是首先分步求出各个位的值,然后在分别判断是否进位,需要进位的就进位,最终将得到的值放在数组里,将数组的值变为字符输出即可。
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
char* multiply(char* a, char* b)
{
int i, j;
int ca, cb;
int* s;
char* data;
ca=strlen(a);
cb=strlen(b);
s=(int*)malloc(sizeof(int)*(ca+cb));
data = (char*)malloc(sizeof(char)*(ca+cb));
for (i=0;i<ca+cb;i++)
s[i]=0;
for (i=0;i<ca;i++)
for (j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for (i=ca+cb-1;i>=0;i--)
if (s[i]>=10)
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
i=0;
while (s[i]==0)
i++;
for (j=0;i<ca+cb;i++,j++)
data[j]=s[i]+'0';
data[j]='\0';
free(s);
return data;
}
int main()
{
char num1[20] = "17";
char num2[20] = "25";
char* result = NULL;
result = multiply(num1,num2);
printf("The result is %s\n",result);
return 0;
}