判断是否为回文数
改变x的值进行测试即可。
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
bool isPalindrome(int x)
{
int base = 10,check = 0,num = 0;
int *p=NULL;
if(x < 0)
return false;
else if(x == 0)
return true;
else
{
if(x % 10 == 0)
return false;
else
{
while(x > 0)
{
p = (int *) realloc (p,sizeof(int));
p[num] = x % 10;
x /= 10;
num++;
check++;
}
}
for(int j = 0 ; j != check ; j++)
{
if(p[j] != p[check - 1 - j])
return false;
}
return true;
}
}
int main()
{
int x =121;
printf("%d",isPalindrome(x));
return 0;
}
两数之和
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int* twoSum(int* nums, int numsSize, int target)
{
int i,j;
int* returnarray = (int *) malloc (sizeof(int) * 2);
for(i = 0 ; i < numsSize - 1 ; i++)
for(j = i+1 ; j < numsSize ; j++)
if(nums[i] + nums[j] == target && i!=j)
{
returnarray[0] = i;
returnarray[1] = j;
return returnarray;
}
free(returnarray);
return 0;
}
int main()
{
int nums[4]={2,7,11,13},numsSize,target,*c;
numsSize=4;
target=9;
c=NULL;
c=twoSum(nums,numsSize,target);
printf("[%d,%d]",c[0],c[1]);
return 0;
}
罗马数字转换为整数
罗马数字分别有 I , V , X , L , C , D , M I,V,X,L,C,D,M I,V,X,L,C,D,M。它的转换规则如下表:
I I I | V V V | X X X | L L L | C C C | D D D | M M M |
---|---|---|---|---|---|---|
1 | 5 | 10 | 50 | 100 | 500 | 1000 |
它的计数方法如下:
- 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3
- 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12
- 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9
我们在转换的时候只需要知道一种思想即可:从一堆罗马数字的最右边开始,若最右边的前面一个大于它就相加,若小于,就减去就行了。
例如:
L
V
X
I
I
I
LVXIII
LVXIII
它的值为
1
+
1
+
1
+
10
−
5
+
50
=
58
1+1+1+10-5+50=58
1+1+1+10−5+50=58
代码如下:
#include <stdio.h>
int romanToInt(char * s)
{
int num,sum = 0,p = 0;
char t1[7] = {'I','V','X','L','C','D','M'};
int t2[7] = {1,5,10,50,100,500,1000};
for(num = 0 ; s[num] != '\0' ; num++);
for(num - 1 ; num >= 0 ; num--)
{
for(int i = 0 ; i < 7 ; i++)
{
if(s[num] == t1[i])
{
if(p <= i)
sum += t2[i];
else
sum -= t2[i];
p = i;
break;
}
}
}
return sum;
}
int main()
{
char *s = "LVIII";
int sum = 0;
sum = romanToInt(s);
printf("%d",sum);
return 0;
}
2022.8.12