坚持就是胜利
Directory
又又又又捡起来了,自己真的不是一个能坚持的人,很多东西都放弃了。
12 Int To Roman
#include <stdio.h>
void test(char *p) {
p = "1234";
}
int main() {
char *p = "abcd";
test(p);
printf("p: %s\r\n", p);
return 0;
}
// right
c中本质上是没有字符串的,像“abcd“, ”1234“这些属于字符串常量, 编译后一般属于.rdata汇编段, 你在c中操作这些字符串常量的时候实际上代表的是这些字符串常量的保存地址, 你调用函数传入char *p, 这个p虽然是指针, 但它其实就是个在函数体内部有存在意义的形式变量, 你只改变了*p的指向(p=”1234“), 却不修改*p指向的空间的内容, 自然在函数返回后这个p的存在被销毁, 而原先的字符串常量的位置分文未动。
如果你直接去修改”abcd"所在的内存linux直接报段错误, 猜想这个字符串常量所在的段被操作系统装载后在权限上不能被修改,正如你不可能依靠物理地址随意修改其他进程的内存空间一样
void test(char **p) {
*p = "1234";
}
整数n(1<=n<=9999)与罗马数字表示有以下对应关系 1000 - m,有几个1000就有几个m对应 900 - 两个字符cm 500 - 一个字符d 400 - 两个字符cd 100 - 一个字符c,有几个100就用几个c表示 90 - 两个字符xc 50 - 一个字符l 40 - 两个字符xl 10 - 一个字符x,有一个10就用几个x 9 - 用两个字符ix表示 5 - 用一个字符v来表示 4 - 用两个字符iv表示 1 - 用一个字符i表示,有几个1就用几个i 将对应的罗马数字和对应的数字放到两个二维数组中一一对应。每一个数字进入之后,从数字数组的第一个元素开始,进行减法,如果差大于等于0,接着对这个数字进行减法操作,如果小于0了,则进入下一个数字进行同样的减法操作,每次差大于等于0的时候,在后面添加上对应的罗马数字。则转换算法应该是这样的。 http://blog.csdn.net/hongbochen1223/article/details/45749665
13 roman To Int
2016-10-05
依然是Easy等级的,但是研究细节很久。
C语言定义字符数组char str[100];
定义字符指针char* s
。如果想要输入字符串则必须要用字符数组,然后字符指针可以指向数组s = str
。
罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。罗马数字转换成整数的规则如下:如果前一个数的值小于后一个数的值,那么这个数为后者减去前者。如果前者大于后者,那么就是简单地相加即可。
202 Happy Number
2016-09-20
题确实不难,很容易就想到用递归,但是遇到两个问题
- 一直报
control reaches end of non-void function [-Werror=return-type]
的错误,知道是因为结尾没有return,但是在最后面无论添加return true
或者return false
都不对,看了别人的答案后,发现当递归时,if语句中没有返回确定的值,要返回该函数,即return isHappy
- 提交后发现1111111的用例错误,就一直不明白,明明是7.。。啊,查询后才发现,7*7=49,4*4+9*9 .。。。 最后为1.ORZ,所以7也为happynumber。
上一篇 毕业季求职